Skip to content

Commit 7520a3f

Browse files
authored
PR #538: Use RNGCryptoServiceProvider for crypto headers
- Use RNGCryptoServiceProvider for crypto headers - Dispose RNG service after use in ZipCrypto
1 parent 134b8f4 commit 7520a3f

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

src/ICSharpCode.SharpZipLib/Encryption/PkzipClassic.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,8 +444,10 @@ public override byte[] Key
444444
public override void GenerateKey()
445445
{
446446
key_ = new byte[12];
447-
var rnd = new Random();
448-
rnd.NextBytes(key_);
447+
using (var rng = new RNGCryptoServiceProvider())
448+
{
449+
rng.GetBytes(key_);
450+
}
449451
}
450452

451453
/// <summary>

src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3727,8 +3727,10 @@ private static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEn
37273727
private static void WriteEncryptionHeader(Stream stream, long crcValue)
37283728
{
37293729
byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
3730-
var rnd = new Random();
3731-
rnd.NextBytes(cryptBuffer);
3730+
using (var rng = new RNGCryptoServiceProvider())
3731+
{
3732+
rng.GetBytes(cryptBuffer);
3733+
}
37323734
cryptBuffer[11] = (byte)(crcValue >> 24);
37333735
stream.Write(cryptBuffer, 0, cryptBuffer.Length);
37343736
}

src/ICSharpCode.SharpZipLib/Zip/ZipOutputStream.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Collections.Generic;
77
using System.IO;
8+
using System.Security.Cryptography;
89

910
namespace ICSharpCode.SharpZipLib.Zip
1011
{
@@ -633,8 +634,11 @@ private void WriteEncryptionHeader(long crcValue)
633634
InitializePassword(Password);
634635

635636
byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
636-
var rnd = new Random();
637-
rnd.NextBytes(cryptBuffer);
637+
using (var rng = new RNGCryptoServiceProvider())
638+
{
639+
rng.GetBytes(cryptBuffer);
640+
}
641+
638642
cryptBuffer[11] = (byte)(crcValue >> 24);
639643

640644
EncryptBlock(cryptBuffer, 0, cryptBuffer.Length);

0 commit comments

Comments
 (0)