gpt4 book ai didi

c# - 为什么RSA加密可以用C#和Java返回不同的结果?

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:45 24 4
gpt4 key购买 nike

我使用:

  • c#: RSACryptoServiceProvider
  • JAVA:KeyFactory.getInstance("RSA")+密码

我将公钥(指数 + 模数)作为字节数组从 Java 发送到 C#。没关系,有相同的字节。但是当我尝试在 Java 和 C# 中使用一个 key 加密一些数据时 - 会出现不同的结果。

Java key 生成:

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# key 接收:

// 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 加密是随机的。对于给定的公钥和给定的消息,每次加密尝试都会产生不同的字节序列。这是正常的,也是意料之中的;随机字节作为填充阶段的一部分注入(inject),不注入(inject)随机字节会导致加密系统薄弱。在解密过程中,填充字节被找到并被移除,原始消息被毫发无损地恢复。

因此,预计您将使用 Java 和 C# 获得不同的加密消息,但如果您运行 Java 或 C# 代码两次也是如此。

关于c# - 为什么RSA加密可以用C#和Java返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2568335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com