2014-02-28 26 views
0

我尝试使用phpseclib加密/解密在VB.NET中加密的字符串,当我试图从VB.NET解密RSA XML时,我没有遇到任何错误,只是一个空白页面。从VB.NET创建的解密RSA [XML]

这里是VB.NET创建的XML键:

私钥:

<RSAKeyValue><Modulus>qfOIjoSxsmBqS3YGsxd4+FBEmFmX4Z/cTAV4l3BOqmMVDxTxHt4QuvK8l2Iv6GeTSp5xuwpqUkgwyo4zb2UQt1sLn2vvAmGqz7Oih6gHYrpA9GmR6QHomsQNJrDTvZXtCPNUmWZ5DzFjnKNL/FfZQGYp0qjIkpIhuLAUhKYzMaM=</Modulus><Exponent>AQAB</Exponent><P>57hBPSAr6VGVYTYL6pUft0y9hbU7cUYEiYhF2pVJ0pv6pGWIb27nK+9U/AaWH0+wtefpRlVyjbeNiDK3rmYmtQ==</P><Q>u8Jgam1//jhcYYCZX5168L0roe6L+IJ0A98zlbQb7crpqbTxqDAsX9LQpGiQP1JZINowAbPECDRZIGfT+fsV9w==</Q><DP>AZASkJD4+tfcBA3TQr/CuP/Bf3dbcUYhnbPXlMPQ/aSjqhwtMWM0F+3DSvfYZ1moPXHU9u54mVAVmkeNSZXSyQ==</DP><DQ>J1DFVaPGKFpu5a/C7eWQ57YE2+ySfJ/8YQ8sww0qx/k0Qmf0Li6gLBR9wd9vTQMWTK3DXafhxYIIo6N6HJ858w==</DQ><InverseQ>Q2MlSoE2ADtFXvjPi5UgxApqp4QewmZONu3vGmAL07JMyDHdgVweevZTJTun3EBRKV0PWCMvtk4BJW0lUSuBNQ==</InverseQ><D>TCzzVWYWu+xJWJ+DazynJS3dQShPUnsz5ANDxSU6rVaR9tudJAfHGfR5IaWJ8bKTK4wPUBXgCBeBfxjz5wc20SyBWa1vL7K4DqLRJ/qEyFSZxXr8wKQOKyexZRGbsLjtUnmYrrXKMOhRkiV/VI1K+TKX/FhoDVPjz8s4GamzNQk=</D></RSAKeyValue> 

公钥:

<RSAKeyValue><Modulus>qfOIjoSxsmBqS3YGsxd4+FBEmFmX4Z/cTAV4l3BOqmMVDxTxHt4QuvK8l2Iv6GeTSp5xuwpqUkgwyo4zb2UQt1sLn2vvAmGqz7Oih6gHYrpA9GmR6QHomsQNJrDTvZXtCPNUmWZ5DzFjnKNL/FfZQGYp0qjIkpIhuLAUhKYzMaM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue> 

明文:你好

RSA加密:从VB.NET]

d1YJ4ePp80Oe0OBTl+fBAKzDUogC56k7XB8ANggDotm44frzkNYUICUog/BV9x7mQyNT0lHj7vXo0uXrOIAS0BxgCNbqrpw0UBIyCX5rMDZF1v/1eQMTDa3jEwss1DQHHikQWVLFH5IGCspzJUTitwQTAyRCLdYTRijTCQhf0oI= 

PHP代码:

<?php 
include('Crypt/RSA.php'); 

$publickey = '...'; 

$xml = new DOMDocument(); 
$xml->loadXML($publickey); 

$modulus = new Math_BigInteger(base64_decode($xml->getElementsByTagName('Modulus')->item(0)->nodeValue), 256); 
$exponent = new Math_BigInteger(base64_decode($xml->getElementsByTagName('Exponent')->item(0)->nodeValue), 256); 

$privatekey = '...'; 

$xml = new DOMDocument(); 
$xml->loadXML($privatekey); 

$d = new Math_BigInteger(base64_decode($xml->getElementsByTagName('D')->item(0)->nodeValue), 256); 
$dp = new Math_BigInteger(base64_decode($xml->getElementsByTagName('DP')->item(0)->nodeValue), 256); 
$dq = new Math_BigInteger(base64_decode($xml->getElementsByTagName('DQ')->item(0)->nodeValue), 256); 
$inverseq = new Math_BigInteger(base64_decode($xml->getElementsByTagName('InverseQ')->item(0)->nodeValue), 256); 
$p = new Math_BigInteger(base64_decode($xml->getElementsByTagName('P')->item(0)->nodeValue), 256); 
$q = new Math_BigInteger(base64_decode($xml->getElementsByTagName('Q')->item(0)->nodeValue), 256); 

$rsa = new Crypt_RSA(); 
$rsa->modulus = $modulus; 
$rsa->publicExponent = $exponent; 
$rsa->exponents = array(1=> $dp, $dq); 
$rsa->coefficients = array(2 => $inverseq); 
$rsa->primes = array(1 => $p, $q); 
$rsa->k = strlen($rsa->modulus->toBytes()); 

$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); 

$ciphertext = base64_decode('d1YJ4ePp80Oe0OBTl+fBAKzDUogC56k7XB8ANggDotm44frzkNYUICUog/BV9x7mQyNT0lHj7vXo0uXrOIAS0BxgCNbqrpw0UBIyCX5rMDZF1v/1eQMTDa3jEwss1DQHHikQWVLFH5IGCspzJUTitwQTAyRCLdYTRijTCQhf0oI='); 
echo $rsa->decrypt($ciphertext); 
?> 

回答

1

正常工作:

<?php 
include('Crypt/RSA.php'); 

$rsa = new Crypt_RSA(); 
$rsa->loadKey('<RSAKeyValue><Modulus>qfOIjoSxsmBqS3YGsxd4+FBEmFmX4Z/cTAV4l3BOqmMVDxTxHt4QuvK8l2Iv6GeTSp5xuwpqUkgwyo4zb2UQt1sLn2vvAmGqz7Oih6gHYrpA9GmR6QHomsQNJrDTvZXtCPNUmWZ5DzFjnKNL/FfZQGYp0qjIkpIhuLAUhKYzMaM=</Modulus><Exponent>AQAB</Exponent><P>57hBPSAr6VGVYTYL6pUft0y9hbU7cUYEiYhF2pVJ0pv6pGWIb27nK+9U/AaWH0+wtefpRlVyjbeNiDK3rmYmtQ==</P><Q>u8Jgam1//jhcYYCZX5168L0roe6L+IJ0A98zlbQb7crpqbTxqDAsX9LQpGiQP1JZINowAbPECDRZIGfT+fsV9w==</Q><DP>AZASkJD4+tfcBA3TQr/CuP/Bf3dbcUYhnbPXlMPQ/aSjqhwtMWM0F+3DSvfYZ1moPXHU9u54mVAVmkeNSZXSyQ==</DP><DQ>J1DFVaPGKFpu5a/C7eWQ57YE2+ySfJ/8YQ8sww0qx/k0Qmf0Li6gLBR9wd9vTQMWTK3DXafhxYIIo6N6HJ858w==</DQ><InverseQ>Q2MlSoE2ADtFXvjPi5UgxApqp4QewmZONu3vGmAL07JMyDHdgVweevZTJTun3EBRKV0PWCMvtk4BJW0lUSuBNQ==</InverseQ><D>TCzzVWYWu+xJWJ+DazynJS3dQShPUnsz5ANDxSU6rVaR9tudJAfHGfR5IaWJ8bKTK4wPUBXgCBeBfxjz5wc20SyBWa1vL7K4DqLRJ/qEyFSZxXr8wKQOKyexZRGbsLjtUnmYrrXKMOhRkiV/VI1K+TKX/FhoDVPjz8s4GamzNQk=</D></RSAKeyValue>'); 

$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); 

echo $rsa->decrypt(base64_decode('d1YJ4ePp80Oe0OBTl+fBAKzDUogC56k7XB8ANggDotm44frzkNYUICUog/BV9x7mQyNT0lHj7vXo0uXrOIAS0BxgCNbqrpw0UBIyCX5rMDZF1v/1eQMTDa3jEwss1DQHHikQWVLFH5IGCspzJUTitwQTAyRCLdYTRijTCQhf0oI=')); 

phpseclib已内置在一段时间内支持XML密钥,所以你不需要跳过所有的h哎呀,你在你的代码中做了。

明文是h e l l o。如果你还没有,请确保你正在运行最新版本的phpseclib。我不知道使用旧版本会引起问题,但运行最新版本无论如何都不是一个坏主意。

+0

哇,我并不需要所有这些箍... 非常感谢!您发布的代码适合我! –