如何使用RSA在javascript中加密并在php中解密 [英] How to encrypt in javascript and decrypt in php using RSA

查看:109
本文介绍了如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆