如何使用RSA在javascript中加密并在php中解密 [英] How to encrypt in javascript and decrypt in php using RSA
本文介绍了如何使用RSA在javascript中加密并在php中解密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用< a href =https://www.pidder.de/pidcrypt/?page=rsa> pidcrypt-rsa< / a>加密客户端的数据用公钥。我想使用php在服务器端解密它,我使用< a href =http://phpseclib.sourceforge.net/rsa/examples.html#convert> phpseclib< / a>用于服务器端解密。
客户端js代码:
功能加密(值){
var public_key = ' ----- BEGIN PUBLIC KEY ----- \\\
\
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6 + H0qtjTkVxwTCpvKe4eCZ0\\\
\
FPqri0cb2JZfXJ / DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1 / \\\
\
3J + skZ6UtW + 5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB \ n\
----- END PUBLIC KEY -----';
params = certParser(public_key);
if (params.b64){
var key = pidCryptUtil.decodeBase64( params.b64);
// 新的RSA实例
var rsa = new pidCrypt.RSA();
// RSA加密
// ASN1解析
var asn = pidCrypt.ASN1.decode(pidCryptUtil .toByteArray(键));
var tree = asn.toHexTree();
// 设置加密公钥
rsa.setPublicKeyFromASN(tree) ;
crypted = rsa.encrypt(value);
return pidCryptUtil.fragment(pidCryptUtil.encodeBase64(pidCryptUtil.convertFromHex(crypted)), 64 跨度>);
}
返回 ' 错误跨度>;
}
服务器端代码:
<?php
包括' Crypt / phpseclib0。 3.8 /隐窝/ RSA.php'跨度>;
....
$ rsa = new Crypt_RSA();
$私人= <跨度类= 代码串> 跨度> <跨度类= 代码串>< RSAKeyValue>
将模量> AKoYq6Q7UN7vOFmPr4fSq2NORXHBMKm8p7h4JnQU + quLRxvYll9cn8OBhIXq9SnCYkbzBVBkqN4ZyMM4vlSWy66wWdwLNYFDtEo1RJ6yZBExIaRVvX / eP6yRnpS1b7m7T2Uc2yPq1DnWzVI + sIGR51s1 / ROnQZswkPJHh71PThln< /模量>
将指数> AQAB< /指数>
将P> AN4DDp + IhBca6QEjh4xlm3iexzLajXYrJid6vdWmh4T42nar5nem8Ax39o3ND9b1Zoj41F9zFQmuZ8 / AgabreKU = LT; / P>
将Q> AMQi + R0G9m0K + AcqK3DFpv4RD9jGc0Tle98heNYT7EQvZuuiq4XjvRz0ybqN // bOafrKhsTpRS9DQ7eEpKLI4Bs = LT; / Q>
将DP> FklyR1uZ / wPJjj611cdBcztlPdqoxssQGnh85BzCj / u3WqBpE2vjvyyvyI5kX6zk7S0ljKtt2jny2 + 00VsBerQ ==< / DP>
将DQ> AJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu / fhrT8ebHkTz2eplU9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhM = LT; / DQ>
< InverseQ> EaiK5KhKNp9SFXuLVwQalvzyHk0FhnNZcZnfuwnlCxb6wnKg117fEfy91eHNTt5PzYPpf + xzD1FnP7 / qsIninQ ==< / InverseQ>
< D> Fijko56 + qGyN8M0RVyaRAXz ++ xTqHBLh3tx4VgMtrQ + WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2pIIVOFMDG + KESnAFV7l2c + cnzRMW0 + b6f8mR1CJzZuxVLL6Q02fvLi55 / mbSYxE = LT; / d取代;
< / RSAKeyValue>; // 私钥粘贴
$ rsa-> loadKey($ public,CRYPT_RSA_PRIVATE_FORMAT_XML);
$ rsa-> setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ rsa-> ; loadKey($ private,CRYPT_RSA_PRIVATE_FORMAT_XML);
// echo'my公钥:'。$ rsa- > loadKey($ private);
$ de = $ rsa-> decrypt(base64_decode($ name));
echo $ de ;
....
?>
但它没有回应任何东西!
我做错了什么?
解决方案
rsa = new Crypt_RSA();
private =< RSAKeyValue>
将模量> AKoYq6Q7UN7vOFmPr4fSq2NORXHBMKm8p7h4JnQU + quLRxvYll9cn8OBhIXq9SnCYkbzBVBkqN4ZyMM4vlSWy66wWdwLNYFDtEo1RJ6yZBExIaRVvX / eP6yRnpS1b7m7T2Uc2yPq1DnWzVI + sIGR51s1 / ROnQZswkPJHh71PThln< /模量>
< Exponent> AQAB< / Exponent>
< P> AN4DDp + IhBca6QEjh4xlm3iexzLajXYrJid6vdWmh4T42nar5nem8Ax39o3ND9b1Zoj41F9zFQmuZ8 / AgabreKU =< / P>
< Q> AMQi + R0G9m0K + AcqK3DFpv4RD9jGc0Tle98heNYT7EQvZuuiq4XjvRz0ybqN // bOafrKhsTpRS9DQ7eEpKLI4Bs =< / Q>
< DP> FklyR1uZ / wPJjj1111cdBcztlPdqoxssQGnh85BzCj / u3WqBpE2vjvyyvyI5kX6zk7S0ljKtt2jny2 + 00VsBerQ ==< / DP>
< DQ> AJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu / fhrT8ebHkTz2eplU9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhM =< / DQ>
< InverseQ> EaiK5KhKNp9SFXuLVwQalvzyHk0FhnNZcZnfuwnlCxb6wnKg117fEfy91eHNTt5PzYPpf + xzD1FnP7 / qsIninQ ==< / InverseQ>
将d取代; Fijko56 + qGyN8M0RVyaRAXz ++ xTqHBLh3tx4VgMtrQ + WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2pIIVOFMDG + KESnAFV7l2c + cnzRMW0 + b6f8mR1CJzZuxVLL6Q02fvLi55 / mbSYxE = LT; / d取代;
< / RSAKeyValue>; // 私钥粘贴
rsa-> LOADKEY(
I encrypt data in client side using <a href="https://www.pidder.de/pidcrypt/?page=rsa">pidcrypt-rsa</a> with public key. I want to decrypt it in server side using php, I use <a href="http://phpseclib.sourceforge.net/rsa/examples.html#convert">phpseclib</a> for server side decrypting.
client side js code:
function Encrypt(value) {
var public_key = '-----BEGIN PUBLIC KEY-----\n\
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0\n\
FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/\n\
3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB\n\
-----END PUBLIC KEY-----';
params = certParser(public_key);
if(params.b64){
var key = pidCryptUtil.decodeBase64(params.b64);
//new RSA instance
var rsa = new pidCrypt.RSA();
//RSA encryption
//ASN1 parsing
var asn = pidCrypt.ASN1.decode(pidCryptUtil.toByteArray(key));
var tree = asn.toHexTree();
//setting the public key for encryption
rsa.setPublicKeyFromASN(tree);
crypted = rsa.encrypt(value);
return pidCryptUtil.fragment(pidCryptUtil.encodeBase64(pidCryptUtil.convertFromHex(crypted)),64);
}
return 'error';
}
server side code:
<?php
include 'Crypt/phpseclib0.3.8/Crypt/RSA.php';
....
$rsa = new Crypt_RSA();
$private="<RSAKeyValue>
<Modulus>AKoYq6Q7UN7vOFmPr4fSq2NORXHBMKm8p7h4JnQU+quLRxvYll9cn8OBhIXq9SnCYkbzBVBkqN4ZyMM4vlSWy66wWdwLNYFDtEo1RJ6yZBExIaRVvX/eP6yRnpS1b7m7T2Uc2yPq1DnWzVI+sIGR51s1/ROnQZswkPJHh71PThln</Modulus>
<Exponent>AQAB</Exponent>
<P>AN4DDp+IhBca6QEjh4xlm3iexzLajXYrJid6vdWmh4T42nar5nem8Ax39o3ND9b1Zoj41F9zFQmuZ8/AgabreKU=</P>
<Q>AMQi+R0G9m0K+AcqK3DFpv4RD9jGc0Tle98heNYT7EQvZuuiq4XjvRz0ybqN//bOafrKhsTpRS9DQ7eEpKLI4Bs=</Q>
<DP>FklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5kX6zk7S0ljKtt2jny2+00VsBerQ==</DP>
<DQ>AJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2eplU9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhM=</DQ>
<InverseQ>EaiK5KhKNp9SFXuLVwQalvzyHk0FhnNZcZnfuwnlCxb6wnKg117fEfy91eHNTt5PzYPpf+xzD1FnP7/qsIninQ==</InverseQ>
<D>Fijko56+qGyN8M0RVyaRAXz++xTqHBLh3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxE=</D>
</RSAKeyValue>"; // private key paste here
$rsa->loadKey($public, CRYPT_RSA_PRIVATE_FORMAT_XML);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$rsa->loadKey($private, CRYPT_RSA_PRIVATE_FORMAT_XML);
//echo'my public key : '. $rsa->loadKey($private);
$de = $rsa->decrypt(base64_decode($name));
echo $de;
....
?>
but it didn't echo any thing!
what I do wrong?
解决方案
rsa = new Crypt_RSA();
private="<RSAKeyValue> <Modulus>AKoYq6Q7UN7vOFmPr4fSq2NORXHBMKm8p7h4JnQU+quLRxvYll9cn8OBhIXq9SnCYkbzBVBkqN4ZyMM4vlSWy66wWdwLNYFDtEo1RJ6yZBExIaRVvX/eP6yRnpS1b7m7T2Uc2yPq1DnWzVI+sIGR51s1/ROnQZswkPJHh71PThln</Modulus> <Exponent>AQAB</Exponent> <P>AN4DDp+IhBca6QEjh4xlm3iexzLajXYrJid6vdWmh4T42nar5nem8Ax39o3ND9b1Zoj41F9zFQmuZ8/AgabreKU=</P> <Q>AMQi+R0G9m0K+AcqK3DFpv4RD9jGc0Tle98heNYT7EQvZuuiq4XjvRz0ybqN//bOafrKhsTpRS9DQ7eEpKLI4Bs=</Q> <DP>FklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5kX6zk7S0ljKtt2jny2+00VsBerQ==</DP> <DQ>AJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2eplU9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhM=</DQ> <InverseQ>EaiK5KhKNp9SFXuLVwQalvzyHk0FhnNZcZnfuwnlCxb6wnKg117fEfy91eHNTt5PzYPpf+xzD1FnP7/qsIninQ==</InverseQ> <D>Fijko56+qGyN8M0RVyaRAXz++xTqHBLh3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxE=</D> </RSAKeyValue>"; // private key paste here
rsa->loadKey(
这篇关于如何使用RSA在javascript中加密并在php中解密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文