我在.net中有以下代码:
RSACryptoServiceProvider cipher = new RSACryptoServiceProvider();
cipher.FromXmlString(publicKey);
byte[] data = Encoding.UTF8.GetBytes(input);
byte[] cipherText = cipher.Encrypt(data, false);
result = Convert.ToBase64String(cipherText);
python中的代码:
^{pr2}$当我用公钥运行这些代码时,我在同一个输入上得到不同的答案!在
我搜索并发现Crypto (python)
和{RSA
算法。在
编辑:.net
中使用的公钥是通过从密钥中删除-----BEGIN PUBLIC KEY-----
和{
示例:
公钥:
^{3}$输入:
"6000306"
.net输出:SpDXp/KCea8DlIuhow6k8+uyfGFe93r9+w39ROoSRAggF9dBU3boK5zRareOQo2//7LyMZZVVklvDCFPo/irJtgbxjn6c0C7gHrL7ubKRG7iVaa9iSF1u13gdRZvLGy/MKOxiz9G+FKLZfJYtkiOSLkJHXXMWTGSNedQsdraJZc=
Python输出:Q3H0NTJYZzymWhWDtMCSzcqZ0D/Nvumq3VqvFCvQRlib82pth48DbVcKwjrmSjT0F/ipi7mnSq8M7BLX/7wo4tQFqul9+avyI/eAW5LKbuFZiiD8eP0GMwEZZyHGurFKhxu+1Qa0dftCIeiIMVJsVaHcUD254BSkYQC04Fflvfc=
有什么问题吗?我错过什么了吗?在
对于python代码,您忽略了使用导入的PKCS1_v1_5模块。因此,您将获得无填充的普通RSA加密。这不是你想要的。如果您的代码是:
然后您将看到密码每次都会更改,即使是使用相同的输入,就像C端一样。PKCS1版本1.5类型2填充包含一个随机组件,因此输出不应该是相同的。在
PKCS1\uOAEP模块是更现代的选择,并且只需在},就可以得到.NET的支持。在
RSACryptoServiceProvider.Encrypt()
方法中将false
更改为{相关问题 更多 >
编程相关推荐