0의 키를 사용하여 DES
암호화 및 암호 해독 작업을 수행해야합니다. 내가 암호화 및 암호 해독 캡슐이 클래스를 사용하고.NET에서 DES에 약한 키
public static class DESCryptoExtensions {
public static ICryptoTransform CreateWeakEncryptor(this DESCryptoServiceProvider cryptoProvider, byte[] key, byte[] iv) {
// reflective way of doing what CreateEncryptor() does, bypassing the check for weak keys
MethodInfo mi = cryptoProvider.GetType().GetMethod("_NewEncryptor", BindingFlags.NonPublic | BindingFlags.Instance);
object[] Par = { key, cryptoProvider.Mode, iv, cryptoProvider.FeedbackSize, 0 };
ICryptoTransform trans = mi.Invoke(cryptoProvider, Par) as ICryptoTransform;
return trans;
}
public static ICryptoTransform CreateWeakEncryptor(this DESCryptoServiceProvider cryptoProvider) {
return CreateWeakEncryptor(cryptoProvider, cryptoProvider.Key, cryptoProvider.IV);
}
public static ICryptoTransform CreateWeakDecryptor(this DESCryptoServiceProvider cryptoProvider, byte[] key, byte[] iv) {
return CreateWeakEncryptor(cryptoProvider, key, iv);
}
public static ICryptoTransform CreateWeakDecryptor(this DESCryptoServiceProvider cryptoProvider) {
return CreateWeakDecryptor(cryptoProvider, cryptoProvider.Key, cryptoProvider.IV);
}
}
을 : 내가 체크 .NET은 DES 키에 부과 우회 social.msdn.microsoft.com에이 코드를 발견
public class SimpleDES {
private readonly byte[] IV = new byte[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
private byte[] mKey;
private DESCryptoServiceProvider des;
public SimpleDES(byte[] aKey) {
if (aKey.Length != 8)
throw new Exception("Key size must be 8 bytes");
mKey = aKey;
des = new DESCryptoServiceProvider();
des.BlockSize = 64;
des.KeySize = 64;
des.Padding = PaddingMode.None;
}
public byte[] Encrypt(byte[] data) {
if (data.Length != 8)
throw new Exception("Data size must be 8 bytes");
ICryptoTransform encryptor = des.CreateWeakEncryptor(mKey, IV);
return encryptor.TransformFinalBlock(data, 0, data.Length);
}
public byte[] Decrypt(byte[] data) {
if (data.Length != 8)
throw new Exception("Data size must be 8 bytes");
ICryptoTransform decryptor = des.CreateWeakDecryptor(mKey, IV);
return decryptor.TransformFinalBlock(data, 0, data.Length);
}
}
Encrypt()
동안 완벽하게 작동을 반환 Decrypt()
의 값은 Encrypt()
과 같습니다. 나는 C#에 익숙하지 않아서 길을 잃어 버렸다. 이견있는 사람?
죄송합니다, 일부는 어떻게 이전에 반 대답을 게시했습니다. 이제 수정했습니다. – Vijay
다른 코드를 검사 한 후 (http://stackoverflow.com/questions/744530/tripledes-specified-key-is-a-known-weak-key-for-tripledes-and-cannot-be-used?rq=1) 나는 같은 결론에 도달했다. 고마워 .-) –