Help us understand the problem. What is going on with this article?

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以外のライブラリを選択した方が良いかとー。

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

matsukaz
株式会社カオナビCTO。SIer2社→サイバーエージェント→トランスリミットCTOを経験。「開発効率をUPする Git逆引き入門」「Slack入門」など執筆。AWS/Node.js/Ruby/Python/PHP/Go
http://matsukaz.hatenablog.com
kaonavi
クラウド人材管理ツール「カオナビ」の製造・販売・サポートを行い、企業の人材管理にイノベーションを起こすことを目的としている会社
https://www.kaonavi.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away