Posted at

iOS/Androidにおけるcrypto-jsの不具合

More than 5 years have passed since last update.

iOS/Android対応のブラウザアプリでcrypto-jsを利用していたところ、数千回に1回ぐらいの割合で以下のような現象が発生しました。


  • SHA256によるハッシュ生成で違う値が生成される

  • AES/DESによる暗号化したデータを復号化しようとしてもMalformed UTF-8 dataのエラーが発生する

調べてみたところ、

Mobile Safari in iOS 6.1.3 produces Error: Malformed UTF-8 data

に近い現象の模様。

上記のディスカッションでは、それなりに大きいサイズのファイルで、かつiOSの話でしたが、数百文字程度の文字列でも発生しました。

失敗したら再度やり直すという対応をいれても発生し続けたので、どうにもならん感じ。

回避策としては、


  • Hash生成には jsSHA を使用

  • 暗号化は独自ロジックで実装

で対応しました

AESあるいはDESなどの暗号化が必須な場合は、crypto-js以外のライブラリを選択した方が良いかとー。

結局何が原因なのかははっきり分からないのが気持ち悪いところ・・・