C#으로 작성된 서버 응용 프로그램에서 AES를 사용하여 일부 데이터를 암호화합니다.C# 및 CryptoJS를 사용한 다른 암호화 결과
async Task<byte[]> Encrypt(string privateKey, string pin, byte[] data)
{
using (var sha = SHA256.Create())
{
byte[] keyHash = sha.ComputeHash(Encoding.UTF8.GetBytes($"{privateKey}"));
byte[] pinHash = sha.ComputeHash(Encoding.UTF8.GetBytes($"{pin}"));
using (Aes aes = Aes.Create())
{
byte[] key = keyHash.Slice(0, aes.Key.Length);
byte[] iv = pinHash.Slice(0, aes.IV.Length);
using (ICryptoTransform transform = aes.CreateEncryptor(key, iv))
using (var stream = new MemoryStream())
using (var cryptStream = new CryptoStream(stream, transform, CryptoStreamMode.Write))
{
await cryptStream.WriteAsync(data, 0, data.Length);
await cryptStream.FlushAsync();
return stream.ToArray();
}
}
}
}
암호화 결과 : I는 I 데이터를 암호화하는 데 사용이 내 C# 코드이다
Key: 81fe1681..6a451c1c
IV: e83c..ae76
예를 들면 소정의 버튼 (32 바이트) 및 IV (16 바이트), ... 사용 데이터는 다음과 같습니다 ...
534c..28f5
이제 CryptoJS를 사용하여 클라이언트 응용 프로그램에서 데이터의 암호를 해독합니다. 나는 똑같은 키와 IV 정보를 사용하지만 암호 해독은 실패한 것처럼 보입니다 ... 적어도 해독 된 결과는 항상 비어 있습니다.
그래서 클라이언트의 데이터를 암호화했습니다 (물론 동일한 키와 IV). 결과적으로 암호화 된 텍스트가 다릅니다. 더 정확하게는 ... 동일하지만 마지막에 더 많은 데이터를 가지고
534c..28f5bbd5..ac0e
내가 서버에서 데이터를 암호화 할 경우 얻을하지는 끝에이 추가 데이터는 무엇입니까?
클라이언트에서 암호화 된 암호화 된 텍스트의 암호를 해독하면 암호 해독이 작동합니다. 간단히 말해 모드와 패딩은 서버와 클라이언트 모두에서 기본값 인 CBC
과 Pkcs7
입니다. keysize는 256
이어야합니다. 이것은 서버가 암호화 한 데이터의 암호를 해독하는 데 사용하는 코드입니다.
let keyHash: WordArray = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(privateKey));
let key: WordArray = CryptoJS.lib.WordArray.create(keyHash.words.slice(0, 8), 32);
let pinHash: WordArray = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(pin));
let iv: WordArray = CryptoJS.lib.WordArray.create(pinHash.words.slice(0, 4), 16);
let cfg: CryptoJS.lib.IBlockCipherCfg = { iv: iv };
let paramsData: CryptoJS.lib.CipherParamsData = {
ciphertext: cipherBuffer
};
let decrypted: WordArray = CryptoJS.AES.decrypt(paramsData, key, cfg);
감사합니다. 문제가 해결되었습니다. – Matze