I using:
- 时间:2019-03-17 标签:c#:RSACryptoServiceProvider
- JAVA:KeyFactory.getInstance(“RSA”)+密码
我将公钥(指数+模数)作为字节数组从java发送到c#。没关系,有相同的字节。但是,当我尝试用 Java 和 C# 中的一键加密一些数据时,会出现不同的结果。
Java 密钥生成:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize( Config.CRYPTO_KEY_NUM_BITS );
m_KeyPair = keyGen.genKeyPair();
m_PublicKey = KeyFactory.getInstance("RSA").generatePublic(
newX509EncodedKeySpec(m_KeyPair.getPublic().getEncoded()));
byte[] exponent = m_PublicKey.getPublicExponent().toByteArray();
byte[] modulus = m_PublicKey.getModulus().toByteArray(); // then sending...
C# 密钥接收:
// Recieved...
m_ExternKey = new RSAParameters();
m_ExternKey.Exponent = exponent;
m_ExternKey.Modulus = modulus;
m_RsaExtern = new RSACryptoServiceProvider();
m_RsaExtern.ImportParameters(m_ExternKey);
byte[] test = m_RsaExtern.Encrypt(bytesToEncrypt, true);
问题是加密的字节不同。
谢谢。
RSA 加密是随机的。对于给定的公钥和给定的消息,每次加密尝试都会产生不同的字节序列。这是正常现象,也是意料之中的;随机字节作为填充阶段的一部分被注入,不注入随机字节将导致加密系统较弱。在解密过程中,填充字节被定位并删除,并且原始消息被完好无损地恢复。
因此,预计您将使用 Java 和 C# 获得不同的加密消息,而且如果您运行 Java 或 C# 代码两次,也会获得不同的加密消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)