【问题标题】:DotNetZip WinZipAes256 Using Random Salt?DotNetZip WinZipAes256 使用随机盐?
【发布时间】:2015-05-22 10:08:16
【问题描述】:

如果这个问题的答案很明显,请原谅我。

我需要知道 DotNetZip (Ionic.Zip.dll) 中的 AES 256 加密是否会生成随机盐?

例如EncryptionAlgorithm.WinZipAes256 是否使用内部类 WinZipAesCrypto。特别是静态方法 WinZipAesCrypto Generate??

  using (ZipFile zip = new ZipFile())
  {
    zip.AddFile("CustomerData.pdf"); 
    zip.Password= "123456!";
    zip.Encryption = EncryptionAlgorithm.WinZipAes256;       
    zip.Save("Customer.zip");
  }

对我提出的一个要求是,每次我们进行 AES 加密时都会生成一个随机盐,我需要 100% 确定是这种情况?

谢谢

【问题讨论】:

标签: c# encryption aes salt dotnetzip


【解决方案1】:

来自https://dotnetzip.codeplex.com/SourceControl/latest#Zip/WinZipAes.cs

public static WinZipAesCrypto Generate(string password, int KeyStrengthInBits)
{
    WinZipAesCrypto c = new WinZipAesCrypto(password, KeyStrengthInBits);

    int saltSizeInBytes = c._KeyStrengthInBytes / 2;
    c._Salt = new byte[saltSizeInBytes];
    Random rnd = new Random();
    rnd.NextBytes(c._Salt);
    return c;
}

所以,是的,它是(伪)随机的,但在密码学上并不强。如果这是一个问题,您可以随时下载源代码并重写方法以使用RNGCryptoServiceProvider

【讨论】:

  • 感谢您的回复,我是新手。好的,我已经看到了您发布的代码。但是我怎么能 100% 确定 EncryptionAlgorithm.WinZipAes256 方法利用了这个呢?
  • ...或者从文件 WinZipAes 中的注释中获取保证: DotNetZip 库的大多数使用不会涉及直接调用 WinZipAesCrypto 类。相反,当对条目使用 WinZip AES 加密或解密时,ZipEntry() 类会实例化并使用 WinZipAesCrypto 类。
  • @fourbeatcoder:另外,作为测试,您可以对同一个文件加密两次并执行二进制比较。虽然这并没有告诉您任何有关“盐”生成算法的信息,但它可以保证,只要结果不同,加密中就有一些“随机”组件。
  • 当然,除非您自己编译代码并放置断点,否则您无法百分百确定......
  • @stefan 谢谢。我确实看到了关于间接调用的评论。我将研究执行二进制比较。如果我不成功,我会下载代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 2011-04-30
  • 1970-01-01
相关资源
最近更新 更多