【问题标题】:Can I find the key in Triple DES encryption algorithm if I have IV, encryption data and the resulting value?如果我有 IV、加密数据和结果值,我可以在三重 DES 加密算法中找到密钥吗?
【发布时间】:2011-10-10 06:51:09
【问题描述】:

这并不意味着任何类型的黑客攻击,我只是在尝试使用 .NET 中的三重 DES 加密技术。我有一些测试数据。我必须用给定的数据得到结果。我也有结果。但值永远不会匹配。我确信代码很好(将在下面给出)。所以我认为唯一的可能是钥匙错了,所以让我们找到钥匙,看看是否匹配。以下是我的代码:

byte[] key = StringToByteArray("5b70649d4ae0bf2af891c167514aa7515b70649d4ae0bf2a");
byte[] iv = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };
byte[] bytes = Encoding.ASCII.GetBytes("95e4d77c6d6c6c993333303533303833");
TripleDESCryptoServiceProvider tripleDes = new TripleDESCryptoServiceProvider();
tripleDes.Mode = CipherMode.CBC;
//tripleDes.Padding = PaddingMode.None;
tripleDes.Key = key;
tripleDes.IV = iv;
MemoryStream ms = new MemoryStream();
ICryptoTransform encryptor = tripleDes.CreateEncryptor();

CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write);
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
byte[] cipher = ms.ToArray();
string finalValue = ByteToString(cipher, 16); //ByteToString method will convert byte array to string.

最终结果是1B529558534F43D15556AD65C7E396D5674EE8A09E0A29A84389020EF820AC51B7D5E1B33BDA18A2。 因为我只需要 16 个字节,所以我只将前 16 个字节转换为十六进制 1B529558534F43D15556AD65C7E396D5

但预期的结果是76db821f5c7af12dc8d70a6a79cfcb77 如果我能找到密钥,我可能知道密钥中也需要进行某种处理。

感谢您的帮助!

【问题讨论】:

  • 您希望我们帮助您获得可能属于或不属于您的加密密钥?
  • @Inuyasha 我已经明确提到我有一些测试数据,“关键”是其中的一部分。我无法获得正确的最终值,这让我认为这是一种选择。

标签: .net algorithm tripledes


【解决方案1】:

虽然它肯定是可能的,但我认为 TripleDESCryptoServiceProvider 类并非旨在“反向”工作,以便在您拥有密码、IV 和未加密数据时为您提供密钥。为什么要这样?

【讨论】:

  • 谢谢!我认为在收到加密的字节数组后必须进行一些处理。我会和给我测试数据的供应商核实一下。
  • 并将在空闲时间尝试更好地理解算法。 :)
猜你喜欢
  • 2022-12-17
  • 2016-12-10
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多