繁体   English   中英

浏览器加密服务器解密

[英]Browser encrypting Server decrypting

在客户端的浏览器中,我使用jsencrypt.js和公共密钥对rand_key变量进行加密。 加密的密钥通过正文通过邮件发送到服务器。 (在给定IT结构的情况下,这是唯一的方法。)在浏览器中,我具有:

<!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>

在我的PC运行节点(我收到电子邮件的位置)上:

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)端修复解密问题? 谢谢 !

该错误为您提供了有关填充错误的信息。 JSencrypt基于JSBN,仅支持PKCS#1 v1.5填充,但不支持OAEP。 您必须将NodeRSA配置为使用适当的填充:

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

然后,您要将Base64编码的字符串传递给key_pri.decrypt ,但它希望将实际数据作为Buffer,因此您首先需要解析以下内容:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM