我正在尝试加密要通过API发送给身份验证的密码。我的情况非常类似于another encrypt example
Python部分的格式为see the get_pwd_rsa function
Python部分:
import rsa
key = rsa.PublicKey(n, e)
encropy_pwd = rsa.encrypt(message, key)
binascii.b2a_hex(encropy_pwd)
而且我尝试使用phpseclib解决我的问题,但是加密结果不正确:
use phpseclib\Crypt\RSA;
$rsa = new RSA();
$rsa->loadKey([
'n' => new \phpseclib\Math\BigInteger($n, 16),
'e' => new \phpseclib\Math\BigInteger($e, 16),
]);
$ciphertext = $rsa->encrypt($message);
return bin2hex($ciphertext);
加密结果不正确,我不确定我缺少哪一部分。
[补充James所说的话,我怀疑您正在使用的任何Python库都在进行PKCS1填充,如果它完全在进行任何填充。
与phpseclib进行对比,后者默认使用OAEP填充。可以启用PKCS1填充,但是它对更安全的OAEP填充默认值。
此外,PKCS1和OAEP加密都是随机的。我之所以这样说,是因为我有点想知道您是否在说PHP代码错误,因为它给出的结果与python代码不同。不应该这样如果您使用phpseclib两次运行一轮RSA加密,并且每次都使用相同的明文和密钥,则每次将获得不同的密文。 PKCS1和OAEP的设计目的是为了防御已知的明文攻击。