카테고리 보관물: Language (Programming)

iOS, Android, Java, JavaScript에서 AES 동일한 Mode / Padding 으로 사용하는 Tip

먼저 정리할 부분…

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