在python和.net上使用单个公钥进行加密的不同答案

海军777

我在.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中:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
from base64 import b64encode
key = open(public_key_loc, "r").read()
rsakey = RSA.importKey(key)
encrypted_data = rsakey.encrypt(input, 32)[0]
result = b64encode(encrypted_data)

当我使用公共密钥运行此代码时,在相同的输入上会得到不同的答案!

我已经搜索并发现了两个Crypto (python)RSACryptoServiceProvider (.net)正在使用的RSA算法。

编辑:使用中的公钥.net,通过去除创建-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----从密钥并将其转换为XML。

例:

公钥:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCETtzC9pZ+dnQ0z0pXL6pNrkn4vGdbLTf3fhH5
MsVYsFIPuuaUSC9EnbTa8G9p1AIKNsjQaBbzfkvgdu5Tz8qEXZfYQV2bnSCtl/87M7Xn0raAmGTr
jSliTdsxMyJHObzAPkamjHemAxHd9VkwXfZOPAh00ueag+buTAkbzL1MlQIDAQAB
-----END PUBLIC KEY-----

输入:

"6000306"

.net输出: SpDXp/KCea8DlIuhow6k8+uyfGFe93r9+w39ROoSRAggF9dBU3boK5zRareOQo2//7LyMZZVVklvDCFPo/irJtgbxjn6c0C7gHrL7ubKRG7iVaa9iSF1u13gdRZvLGy/MKOxiz9G+FKLZfJYtkiOSLkJHXXMWTGSNedQsdraJZc=

Python输出: Q3H0NTJYZzymWhWDtMCSzcqZ0D/Nvumq3VqvFCvQRlib82pth48DbVcKwjrmSjT0F/ipi7mnSq8M7BLX/7wo4tQFqul9+avyI/eAW5LKbuFZiiD8eP0GMwEZZyHGurFKhxu+1Qa0dftCIeiIMVJsVaHcUD254BSkYQC04Fflvfc=

问题是什么?我想念什么吗?

总统詹姆斯·波尔克

对于python代码,您已经忽略了使用导入的PKCS1_v1_5模块。结果,您将获得无填充的普通RSA加密。这不是您想要的。相反,如果您的代码是:

key = open(public_key_loc, "r").read()
rsakey = RSA.importKey(key)
cipher = PKCS1_v1_5.new(rsakey)
encrypted_data = cipher.encrypt(input)
result = b64encode(encrypted_data)

然后您会看到,即使输入相同,密码也会每次更改,就像C#端一样。PKCS1版本1.5类型2填充包含随机成分,因此输出永远不应相同。

该PKCS1_OAEP模块是更现代的选择,并通过.NET支持通过简单地改变falsetrueRSACryptoServiceProvider.Encrypt()方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Modulus和指数/公钥快速破解Java中的大量RSA加密

使用Jsch和公钥连接sftp

AES 256加密:公钥和私钥如何生成和使用.net

对使用公钥和私钥加密(用于加密)感到困惑

AES加密不同结果Java和Python

如何在C#RSA中使用私钥加密和使用公钥解密

Python加密,RSA公钥/私钥,带有大文件

如何使用Python的加密模块加载RSA公钥

RSACryptoServiceProvider使用自己的公钥和私钥进行加密和解密

我有一个RSA公钥指数和模数。如何使用Python加密字符串?

如何从python的RSA公钥中提取N和E?

如何使用OpenSSL EVP例程进行RSA公钥加密?

非对称加密算法,允许使用公钥和私钥进行加密和解密

RSA:在Python和PHP中从n和e生成公钥给我两个不同的公钥

使用TSS.NET在TPM2上进行公钥加密

Python:使用GPG和子进程进行对称加密

iOS:使用公钥(具有模数和指数)进行RSA加密

使用IOS进行公钥加密和使用C#进行解密

Android和Google App Engine之间的公钥加密

使用openssl和DER格式的公钥加密小文件

对称和公钥加密

GnuPG生成公钥/私钥对,其中公钥和私钥相同且没有不同

openssl在php和c上获得了不同的DH公钥

使用nodeJS和Objective-C的非对称公钥/私钥加密RSA

使用公钥和私钥发送加密和签名的电子邮件以在 FMCSA 中提交数据

如何使用在 Hyperledger Fabric 中生成的 ECDSA 私钥和公钥进行加密和解密

(C#) 在 (EC)DHE x25519 上使用私钥和公钥计算密钥份额

如何使用公钥加密数据并在python中使用base64对其进行编码?

如何使用 python Openssl 公钥加密字符串?