2016-04-24 36 views
0

クライアントのブラウザで、jsencrypt.jsと公開鍵を使用してrand_key変数を暗号化します。 暗号化されたキーは、本体のメールでサーバーに送信されます。 (これは、ITの構造与えられた私の手の届くところに唯一の方法です。)私のブラウザで を私が持っている:(私は電子メールを受信)私のPC実行しているノード上でブラウザ暗号化サーバ解読

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <script type="application/javascript" src="jsencrypt.js"></script> 
</head> 
<body> 
<script> 
    var pubkey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALDjeFwFNhMCjMwcRVVKG1VvfsntEVPR3lNTujJnNk1+iSqZ4Tl5Lwq9GbwO+qlYVwXHNmeqG7rkEhL9uyDIZVECAwEAAQ==" 
    var rand_key = 'vpeq91mckhntgldi'; 
    // Encrypt rand_key 
    var encrypt = new JSEncrypt(); 
    //console.log('encrypt obj', encrypt); 
    encrypt.setPublicKey(pubkey); 
    var encrypted_rand_key = encrypt.encrypt(rand_key, 'base64'); 
    console.log('encrypted_rand_key', encrypted_rand_key); 
</script> 
</body> 
</html> 

var CryptoJS = require("crypto-js"); 
// encrypted string copied from browser console 
var encrypted = 'IuRaUfDHDIJsO0JZbEj7RS/1Sw0iSZPB267MN9lmF5Fn/kuMMRyKlAjplwvUJ9qvirajOcAQNnRZs9A+gVcWLQ==' 
IuRaUfDHDIJsO0JZbEj7RS/1Sw0iSZPB267MN9lmF5Fn/kuMMRyKlAjplwvUJ9qvirajOcAQNnRZs9A+gVcWLQ== 

var key_pri = new NodeRSA('-----BEGIN RSA PRIVATE KEY-----MIIBPAIBAAJBALDjeFwFNhMCjMwcRVVKG1VvfsntEVPR3lNTujJnNk1+iSqZ4Tl5Lwq9GbwO+qlYVwXHNmeqG7rkEhL9uyDIZVECAwEAAQJBAIS8vYX4FyLex/8mu9SLvsU23KL0dgs7MqW+77uA/hvZt5eb/C0EfUekap3LBuAF3XqVkOwIjsDyj74adrB6J1ECIQDfxT74mqu+xZjdlrfNZcchu/MrrW631aMF4rsRZccTbQIhAMpdneTSAATCwE8vt4bS6BBnv8Y8ZceNO6wGOvcW30b1AiAY2MEGP75kP3Ka4Dpmfy+eSk1VAzvxA7LHW4akBuYU/QIhAMk7gtGSCjaxuy6DUssdW2tE4C0uzj87sIUFxQkEk48pAiEAkHxKin7tcB4pVU2yurSbGkB+TbaCOfkIzR4griXq00k=-----END RSA PRIVATE KEY-----'); 

var decrypted = key_pri.decrypt(encrypted, 'utf8'); 
console.log('decrypted: ', decrypted); 

を残念ながら、

Error: Error during decryption (probably incorrect key). Original error: Error: error:040A1079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error 

サーバー(pc)側の説明を修正するにはどうすればよいですか? ありがとう!

答えて

0

エラーにより、埋め込みが間違っているという情報が表示されます。 JSencryptはJSBNに基づいており、PKCS#1 v1.5パディングのみをサポートしますが、OAEPはサポートしません。あなたは適切なパディングを使用するNodeRSAを設定する必要があります。そして、

var key_pri = new NodeRSA(privateKeyString, { 
    encryptionScheme: 'pkcs1' 
}); 

を、あなたはkey_pri.decryptにBase64でエンコードされた文字列を渡しているが、あなたが最初にそれを解析する必要があるので、それは、バッファとして実際のデータを期待します:

var decrypted = key_pri.decrypt(new Buffer(encrypted, 'base64'), 'utf8'); 
+0

素晴らしい!ありがとう! – ArtDijk

関連する問題