Java/실무
복호화 시 키가 맞지 않는다는 오류가 뜰 때
냠냠쿠
2024. 7. 2. 09:54
728x90
A파일이 암호화 되어 있으니 복호화하여 사용하라고 하셔서 받은 키로 복호화를 진행 하였으나 키가 맞지 않는다는 오류가 발생했다.
키가 동일함에도 불구하고 키가 맞지 않는다는 오류가 뜬다면 아래와 같이 해결한다.
1. 키 세팅을 알아본다.
암호화 방식이 복호화 방식과 동일한지 확인하고 그것 또한 동일한 경우 키 세팅을 알아본다.
나의 경우 키 세팅을 별도로 하지 않고 바로 복호화 처리 했었음
public byte[] AESEncrypt256_File(string filePath, string key)
{
RijndaelManaged aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(key.Substring(0, 16));
var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] xBuff = null;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
{
byte[] xXml = File.ReadAllBytes(filePath);
cs.Write(xXml, 0, xXml.Length);
}
xBuff = ms.ToArray();
}
return xBuff;
}
나중에 보니 암호화 할 때 위와 같이 키 세팅이 되어 있었다.
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec secretKeySpec = new SecretKeySpec(token.substring(0, 32).getBytes(StandardCharsets.UTF_8), "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
그래서 위와 같이 나도 키 설정을 해 줬다.
AES/CBC/PKCS5Padding 는 iv를 사용하고
AES/EBC/PKCS5Padding 는 iv를 사용하지않아서 EBC로 넘기면 iv 사용하지않는다고 오류가 뜨니, 어렵지 않게 설정이 가능하다.
생각보다 별거 아니었던 복호화!
728x90