RSA非対称公開鍵および秘密鍵暗号化フロントエンドアプリケーション
1.プロジェクトアプリケーションのシナリオ:
プロジェクトには機密性が含まれ、機密情報は通常、情報セキュリティを向上させるために暗号化されます。今日、プロジェクトマネージャーは、cmsバックグラウンド管理システムのパスワードをRSAで暗号化する必要があります。
2.関連する文書と説明
非対称暗号化では、暗号化と復号化に使用される鍵は同じ鍵ではありません。
一方のペアは外部に公開されて公開鍵と呼ばれ、
もう一方は所有者だけが知っている秘密鍵と呼ばれます。
用公钥加密的信息只有私钥才能解开,反之,用私钥加密的信息只有公钥才能解开(签名验签)。
代表:RSA算法。速度慢,适合少量数据加密。对称加密算法不能实现签名,因此签名只能非对称算法
3.コード
<!DOCTYPE html>
<html>
<head>
<title>RSA 非对称公私钥加密前端应用 </title>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="http://passport.cnblogs.com/scripts/jsencrypt.min.js"></script>
<!--注 如果需要此文件直接访问 粘贴下来就可以 -->
<script type="text/javascript">
$(function () {
$("#testme").click(function () {
var encrypt = new JSEncrypt();
encrypt.setPublicKey($("#pubkey").val()); //设置公钥
//此处设断点检查问题 AA
var decrypt = new JSEncrypt();
decrypt.setPrivateKey($("#privkey").val()); // 设置私钥
var uncrypted = decrypt.decrypt(encrypted); //解密加密串
// 检测是否解密成功
if (uncrypted == $("#input").val()) {
alert("解密成功");
} else {
alert("有问题,不能解析");
}
});
});
</script>
</head>
<body>
<label for="privkey">私钥</label><br />
<!-- 此处是你要检测的私钥串 -->
<textarea id="privkey" rows="15" cols="65">
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----</textarea
><br />
<label for="pubkey">公钥</label><br />
<!-- 此处是你要检测的公钥串 -->
<textarea id="pubkey" rows="15" cols="65">
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9 +WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
-----END PUBLIC KEY-----</textarea
><br />
<label for="input">输入的文本:</label><br />
<textarea id="input" name="input" type="text" rows="4" cols="70">
This is a test!</textarea
><br />
<input id="testme" type="button" value="Test Me!!!" /><br />
</body>
</html>
5.注意が必要な事項
- フロントエンドが暗号化処理を実行しているときに、AAが公開鍵を設定した後、暗号化が誤っている場合があります。
理由の分析:このステップは実際には公開鍵の正確性を伴わないため、設定プロセス中に、encryptobjectプロパティ内
ここで、eは0で、bigIntergerオブジェクトは空であり、公開鍵が正常に設定されていないため、falseと表示されます。
ロードしたjsencrypt.min.jsが他のアイテムと競合していないかどうかを確認してください。base64.jsが原因です。プロジェクトにロードされると影響が
あります通常、公開鍵を設定するとオブジェクト文字列が表示されます