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