OpenSSL で作成した RSA 暗合鍵、どのJSコードが良いのか探した。
JSEncrypt というのが一番使い易い。
電子署名で、SHA256 にするので、CryptoJS から、
sha256.js だけ使う。
<script src="jsencrypt.min.js" type="text/javascript"></script> <script src="sha256.js" type="text/javascript"></script>
公開鍵で暗合化
var crypt = new JSEncrypt(); // 公開鍵 publickey は、Base64エンコード済 crypt.setPublicKey(publickey); var encedtxt = crypt.encrypt(planetext);
秘密鍵で複合
// 秘密鍵 *.pem を読み込んでよけいなマーキングを除去 var secretkey = $('#pemkey').val() .replace("-----BEGIN RSA PRIVATE KEY-----", "") .replace("-----END RSA PRIVATE KEY-----", "") .replace(/\r?\n/g, ''); var crypt = new JSEncrypt(); crypt.setPrivateKey(secretkey); var decrypted = crypt.decrypt(enctext);
署名作成 (秘密鍵で平文を署名)
var sign = new JSEncrypt(); sign.setPrivateKey(secretkey); var signature = sign.sign(planetext, CryptoJS.SHA256, "sha256");
署名検証、元の平文、公開鍵で署名を検証する
var verify = new JSEncrypt(); verify.setPublicKey(publickey); var verified = verify.verify(planetext, signature, CryptoJS.SHA256); if (verified){ alert('検証 成功'); }else{ alert('不正な電子署名 !!'); }