JavaScript で RSA 暗合複合

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('不正な電子署名 !!');
}