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以外のライブラリを選択した方が良いかとー。
結局何が原因なのかははっきり分からないのが気持ち悪いところ・・・