gpt4 book ai didi

c# - Java SecretKey 并在 C# 中复制它的行为

转载 作者:行者123 更新时间:2023-11-30 05:00:34 26 4
gpt4 key购买 nike

我正在尝试在 C# 应用程序中复制 Java 库中的加密逻辑。

Java 包含两种方法,我已设法在 C# 中复制它们。对于任何数据集,我在每个程序中都得到相同的结果。

createKey(byte data1[], MessageDigest md);
createIV(byte data2[], MessageDigest md);

Java中生成key和IV的逻辑如下:

public Cipher getCipher(byte[] password) {

MessageDigest md = MessageDigest.getInstance("SHA-1");

byte keyData[] = createKey(byte[] password, md);

SecretKey secretKey =
SecretKeyFactory.getInstance("DESede").
generateSecret(new DESedeKeySpec(keyData[]));

IVSpec ivspec = createIV(secretKey.getEncoded(), md);

Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
cipher.init(1, secretKey, ivSpec, md);

return cipher;
}

假设我有以下内容:

Java Key HEX:       9c 3a 79 df ba 49 86 0 ed 58 1 d8 9b a7 94 0 bb 3e 8f 80 4d 67 0 0

当我构建 SecretKey 然后调用 SecretKey.getEncoded() 时,我得到:

Java Encoded Key: : 9d 3b 79 df ba 49 86 1 ec 58 1 d9 9b a7 94 1 ba 3e 8f 80 4c 67 1 1     

因为我不知道 SecretKey 在内部做什么,所以我不知道如何在 C# 中复制它。

我当前的 C# 代码如下所示:

    public static ICryptoTransform createCryptoTransform(String password)
{

ICryptoTransform ct = null;

byte[] keyData = createKey(password);
byte[] ivData = createInitialisationVector(keyData);

printByteArray("keyData", keyData);
printByteArray("ivData", ivData);

TripleDESCryptoServiceProvider tdcsp = new TripleDESCryptoServiceProvider();

tdcsp.Key = keyData; / This seems to be ignored by CreateEncryptor method below
tdcsp.KeySize = 192;
tdcsp.IV = ivData; // This seems to be ignored by CreateEncryptor method below
tdcsp.Mode = CipherMode.CBC;
tdcsp.Padding = PaddingMode.PKCS7; // PKCS5 and PKCS7 provide the same padding scheme

ct = tdcsp.CreateEncryptor(keyData, ivData);

return ct;

}

如您所见,我正在使用从未编码的 key 创建的 ivData[]。

一切正常,也就是说,如果我在创建加密器时传递相同的 IV 数据,我会得到相同的加密结果,但不幸的是我无法修改它生成 IVSpec 的方式。

SecretKey 内部在做什么以及如何在 C# 中复制它?

最佳答案

DES(和 DESede)都从 64 位输入导出 56 位 key Material 。剩余的 8 位在这里用作奇偶校验位。 source code向您展示了 Java 如何处理此问题,您可以在 C# 中应用相同的方法。

另请参阅 FIPS 46-3 开头的部分.

关于c# - Java SecretKey 并在 C# 中复制它的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860915/

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