먼저 정리할 부분…
1. Javascript 에서는 ‘crypto-js'(https://code.google.com/p/crypto-js/#AES) 로 AES 알고리즘을 사용하게 되는데, 문서를 잘 들여다 보면
CryptoJS supports the following modes:
- CBC (the default)
- CFB
- CTR
- OFB
- ECB
And CryptoJS supports the following padding schemes:
- Pkcs7 (the default)
- Iso97971
- AnsiX923
- Iso10126
- ZeroPadding
- NoPadding
위와 같이 지원한다.
2. 자바에서는 공식 문서상(http://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html) 1.4 부터
- AES/CBC/NoPadding (128)
- AES/CBC/PKCS5Padding (128)
- AES/ECB/NoPadding (128)
- AES/ECB/PKCS5Padding (128)
위와 같이 지원한다.
3. iOS 의 경우 공식 문서는 모르겠지만, 자료를 찾다보니
CBC, ECB 모드를 지원하고, PKCS7Padding 과 NoPadding 을
지원하는 것으로 나타난다.
4. 안드로이드는 자바와 동일한 것으로 보이지만, 종종 자료를 보면 PKCS7Padding 을 세팅하는 자료들이 보이긴 한다.
웹/앱/웹어플 에서 서로 데이터를 원활하게 주고 받기 위해서는 보안성이 떨어지긴 하지만 현재까지 테스트 결과로는 AES/CBC/NoPadding 이 제일 무난하다고 보여진다.
유첨) iOS NoPadding 관련 자료.
http://stackoverflow.com/questions/10900894/ios-encryption-aes128-cbc-nopadding-why-is-not-working