4

我的 .Net 应用程序需要与使用以下命令行加密其消息的基于 Linux 的系统通信:

openssl enc -a -e -salt -des3 -pass pass:abc123

在 c# 中加密/解密消息的等效代码是什么样的?

我知道我应该在CBC 模式下使用TripleDESPKCS7 padding。我不知道我应该使用什么块大小初始化向量 (IV)

我也很困惑如何从密码中获取密钥。我应该使用PBKDF1还是PBKDF2,我应该使用什么盐?

因此,对我来说似乎是一项非常标准的工作以通宵的谜题结束。有谁能够帮助我?

4

1 回答 1

6

所以这里是诀窍:

> openssl enc -a -e -salt -des3 -P -pass pass:abc123
salt=17685C0658F85BA4
key=1CB6E5A0AA4953EC2323CBA021EF008C9193F5F29990DE87
iv =9148EB5B2BF2E9B2

如果我输入TripleDES算法,输出几乎与 openssl 输出相同。唯一的区别是在 openssl 输出的开头多了 16 个字节。这些字节中的前八个是“Salted__”文本,后八个是盐。

盐是随机的。那么我应该如何从密码和盐中导出密钥和iv?PBKDF1PBKDF2都不符合条件。

所以这是第二个技巧:

A = MD5(pwd + SALT)
B = MD5(A + PWD + SALT)
KEY + IV = A + B

加号代表连接,Key 是 24 字节长,IV 是 8 字节长。

我从Deusty 博客中学到了这些技巧,他在那里用 AES 做类似的事情。

于 2010-11-05T10:42:34.123 回答