.net - .NET 中的 "openssl enc -a -e -salt -des3 -pass pass:abc123"等价物是什么?

标签 .net openssl 3des pkcs#5

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

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

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

我知道我应该使用 TripleDESCBC modePKCS7 padding .我不知道的是什么block sizeinitialization vector (IV)我应该使用。

我也很困惑我应该如何从密码中导出 key 。我应该使用 PBKDF1PBKDF2我应该用什么盐?

所以对我来说,似乎是一份相当标准的工作以通宵拼图结束。有谁能够帮助我?

最佳答案

所以这里是诀窍:

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

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

盐是随机的。那么我应该如何从密码和盐中导出 key 和 iv 呢? PBKDF1也不是 PBKDF2不合格。

所以这是第二个技巧:
A = MD5(pwd + SALT)
B = MD5(A + PWD + SALT)
KEY + IV = A + B

加号代表串联,Key 为 24 字节长,IV 为 8 字节长。

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

关于.net - .NET 中的 "openssl enc -a -e -salt -des3 -pass pass:abc123"等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4090098/

相关文章:

ruby - 在 .NET 的 Ruby 中使用 3DES 解密十六进制字符串

c# - C#中如何替换两个字符之间的文本

c# - Stripe API - 基于元数据的搜索

c# - 正确使用 Async/Await for Multiple Tasks To Db

.net - XSD 和自动类/消息生成

c - Openssl hmac 生成不同的结果

ssl - openssl参数和 key 生成的基本使用

windows - 在 Windows 上配置 stunnel 和 openssl 以支持 TLS 1.2

swift - MD5 3DES 加密 Swift

java - Java 中使用零填充的三重 DES 加密/解密