C#에서 무언가를 암호화하는 데 어려움이 있습니다.C# DES ECB 암호화
나는 3 개의 변수가 있습니다. 우선 하나는 16 진수로하고, X의 값이 IE 0072701351979990 번째는 16 자리 16 진수 값을 불러올 수,
이 두 값은 키를 얻을 XOR 'ED해야 호출 Y IE 3008168011FFFFFF을 할 DES-ECB 암호화.
따라서 307a66934068666f가된다. 이제 암호화를위한 핵심 요소가되었습니다. 그럼 내가 암호화를위한 64 비트입니다 내 datablock이있다. 0E329232EA6D0D73
이제 암호화를 위해 다음 코드가있다. 암호화 결과를 다시 데이터 블록과 XOR해야하고 이 결과 64 비트 결과가됩니다. 그렇지 않다.
이 내가 뭘 잘못 암호화
$ public static string DESEncrypt(string keyBlock,string dataBlock){
DES desEncrypt = new DESCryptoServiceProvider();
byte[] keyBlockBytes = BitConverter.GetBytes(Convert.ToInt64(keyBlock, 16));
byte[] dataBlockBytes = BitConverter.GetBytes(Convert.ToInt64(dataBlock, 16));
desEncrypt.Mode = CipherMode.ECB;
desEncrypt.Key = keyBlockBytes;
ICryptoTransform transForm = desEncrypt.CreateEncryptor();
MemoryStream enecryptedStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(enecryptedStream, transForm, CryptoStreamMode.Write);
cryptoStream.Write(dataBlockBytes, 0, dataBlockBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] encryptedData = new byte[enecryptedStream.Length];
enecryptedStream.Position = 0;
enecryptedStream.Read(encryptedData, 0, encryptedData.Length);
string enCryptedHex = BitConverter.ToString(encryptedData);
return enCryptedHex.Replace("-","");
}
내 코드는?
업데이트 된 질문은 나는 CodeInChaos에서 위의 솔루션을 테스트했습니다. 64 비트 결과를 돌려줍니다. 그러나 여전히 잘못된 것이 있습니다.
여기 내 업데이트 된 코드입니다.
키 블록 값은 ababababababab 이고 데이터 블록 값은 215135734068666F입니다.
결과 64 비트 결과는 데이터 블록과 다시 XOR됩니다.
최종 답변은 414945DD33C97C47인데, 288a08c01a57ed3d가 나옵니다.
왜 제대로 나오지 않습니까?
다음은 암호화에 대한 공급 업체 문서의 사양입니다.
암호화는 홀수 패리티를 가진 단일 64- 비트 DES 키를 사용하여 ECB 모드의 단일 DES 인 FIPS 46-3에 따라 DEA입니다.
$ public static string DESEncrypt(string keyBlock,string dataBlock){
DES desEncrypt = new DESCryptoServiceProvider();
byte[] keyBlockBytes = BitConverter.GetBytes(Convert.ToInt64(keyBlock, 16));
byte[] dataBlockBytes = BitConverter.GetBytes(Convert.ToInt64(dataBlock, 16));
desEncrypt.Mode = CipherMode.ECB;
desEncrypt.Key = keyBlockBytes;
desEncrypt.Padding = PaddingMode.None;
ICryptoTransform transForm = desEncrypt.CreateEncryptor();
MemoryStream enecryptedStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(enecryptedStream, transForm, CryptoStreamMode.Write);
cryptoStream.Write(dataBlockBytes, 0, dataBlockBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] encryptedData = enecryptedStream.ToArray();
string enCryptedHex = BitConverter.ToString(encryptedData);
enCryptedHex = enCryptedHex.Replace("-", "");
long iDeaEncrypt = Convert.ToInt64(enCryptedHex, 16);
long iDataBlock = Convert.ToInt64(dataBlock, 16);
long decoderKey = iDeaEncrypt^iDataBlock;
string decKeyHex = Convert.ToString(decoderKey, 16);
return decKeyHex;
}
"이제 암호화를 위해 다음과 같은 코드가 있습니다. 암호화 결과는 데이터 블록과 다시 XOR되어야하며 결과는 64 비트가되어야합니다. 그게 무슨 뜻 이니? – CodesInChaos