- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 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/
我使用node.js加密文件并在JAVA中解密。解密是使用“AES/GCM/Nopadding”算法在 JAVA 中完成的,它是第三方应用程序,因此我无法更改 JAVA 代码。我使用“aes-256-
Java 的 Cipher 类支持转换 listed there 。其中有几个 NoPadding 变体: AES/CBC/NoPadding (128) AES/ECB/NoPadding (128
我遵循了几个示例,并在尝试实现此处引用的 AES/GCM/NoPadding 时:https://www.strongauth.com/samplecode/GCM.java我无法加密任何包含特殊字符
我正在尝试解密使用 CryptoJS 加密的 java 文本。我在其他帖子中读到它们使用不同的默认模式和填充,因此我将它们(java/cryptojs)都设置为使用 aes/cbc/nopadding
我写了一个类,用于对任意数据进行解密和加密。 它是这样工作的:因为 AndroidKeyStore 生成的 AES key 在卸载应用程序后“丢失”,我们有一个公钥/私钥对,其中公钥包含在应用程序中。
我正在尝试用 Java 和 PHP 加密和解密 Strings,所以我使用 AES/CFB8/NoPadding,这对双方都有效。 现在我的 Cryptor 可以很好地处理拉丁字符,只要我将字符集设置
关于我的实现的信息 下面的代码片段突出显示了我当前使用 AES 密码和 CTR 操作模式实现的加密对象。 import javax.crypto.Cipher; public abstract cla
我们正在尝试在 java 7 中进行支持 AES/GCM/NoPadding 的加密,但出现异常。 找不到任何支持 AES/GCM/NoPadding 的提供商 生成密码实例的代码示例如下。 Secr
哪里可以找到不使用“NoPadding”的 RSA 加密示例? --更新 更好:如何使此 SSCCE 正确运行而不抛出“RSA block 数据过多”异常? import java.math.BigI
当我在 Android Marshmallow(Android 6.0.1) 上使用此代码时,解密正常,但当我在 Android Oreo(Android 8) 设备上运行时,解密值不同且数据不正确。
我是黑莓开发新手,需要使用 AES/ECB/NoPadding 完成加密和解密任务。我使用了下面的代码,来自互联网。 加密方式: public static byte[] encrypt( byte[
使用以下代码,我正在执行 AES 加密操作,我在不同的实例中传递相同的输入,但我得到了不同的密码。为什么会出现这种情况? public static byte[] encrypt(byte[] pl
我认为我的问题需要一些我可能不具备的基本知识。 我正在解密这样的字节数组: var cipher = CipherUtilities.GetCipher("AES/CTR/NoPadding"); c
我已经实现了 AES/CBC/PKCS5Padding 并想在 Java 1.8 中继续使用 AES/GCM/NoPadding 但一直收到 javax. crypto.AEADBadTagExcep
我需要使 C# 应用程序与 Java 应用程序兼容。 Java 应用程序使用 Cipher.getInstance("RSA/ECB/nopadding"); 初始化程序生成密码 ECB 和无填充。
String plain1= "Test"; byte[] cipher = SplashSecure.getInstance().encrypt2(plain1); String plain2 =
尝试在 Marshmallow 上加密和解密一些数据。加密效果很好,但在尝试解密时,我收到 RuntimeException,提示“iv == null”。 基本上,cipher.getIV() 和
我的 AES 加密代码有问题。我只正确加密了前 16 个字符,其余字符不正确。 下面是我的代码。 import java.io.ByteArrayOutputStream; import java.i
Cipher cipher = Cipher.getInstance("AES256/CTR/NoPadding") 以上代码抛出如下异常: Stack trace: java.security.No
我正在尝试使用 AES/GCM/NoPadding 在 Java8 中进行加密。但我无法弄清楚为什么在解密时出现 AEADBadTagException。 这是我的代码: private final
我是一名优秀的程序员,十分优秀!