gpt4 book ai didi

Java Cipher.getInstance ("RSA/ECB/NoPadding"); C# 中的等价物?我无法加密 .net 框架应用程序中的消息

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:48 25 4
gpt4 key购买 nike

我的 friend 有简单的 Java 方法:

 public static byte[] encrypt(byte[] msg, PrivateKey key) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException, NoSuchPaddingException, NoSuchAlgorithmException {
final Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(msg);
}

我需要在 C# 中以相同的方式加密消息。我尝试使用

RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(privkey);
byte[] encryptedEverything = provider.Encrypt(message, false/*tried every options of this constructor*/);

但我有一个System.Security.Cryptography.CryptographyException:'Bad Length。'。当我将 byte[256] 消息拆分为两个 byte[128] 消息、签名,然后合并它们时,我终于得到了一条 byte[512] 消息。我知道为什么,但我必须尝试。

如何使用 C# .net Framework 签署此消息? Java Cipher 是否有等效项? .net 看起来对密码学非常谨慎,我不知道为什么。

最佳答案

您的 friend 有一个简单的不安全方法来执行加密。您永远不应该使用“NoPadding”,因为那样会使用“教科书”或“原始”RSA。要显示如果这样做可能会发生哪些攻击,可以找到 here (请注意出于此特定目的而提出问题的人)。 NoPadding 确实在 Microsoft 类中不可用 - 我认为使用 null 不起作用。

此外,要加密较大的消息,您应该使用混合加密,其中使用公共(public) RSA key 包装(/加密)随机生成的 AES key ,然后使用消息特定的 AES key 来加密数据。通过这种方式,您可以加密任何大小的消息,并且您只需获得 1024 位 RSA key 的一次性开销 - 在您的情况下 - 128 字节(既涉及性能加密消息的大小)。

尽管您希望使用大于 1024 位的 key 大小,但我至少将 key 大小加倍。我还会考虑其中一种 OAEP 计划。 PKCS#1 填充可能存在攻击,因此可以说这些攻击不如较新的 OAEP 方案安全。

关于Java Cipher.getInstance ("RSA/ECB/NoPadding"); C# 中的等价物?我无法加密 .net 框架应用程序中的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998662/

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