私は、クライアント側の暗号化を行う方法を探しています(http://www.matasano.com/articles/javascript-cryptography/を念頭に置きながら)SJCLが見つかりました。しかし、私はそれの良いコード例を見つけることができないようです。すべてのポインタ?良いスタンフォードJavascript暗号ライブラリ(SJCL)の例? (JS暗号化)
23
A
答えて
37
私は、Node.js Crypto、CryptoJS、SJCLDeveloper's Guide to JavaScript and Web Cryptographyというタイトルとこれが(ベースラインとして)のOpenSSLコマンドラインのための簡単なハッシュ、HMAC、PBKDF2およびAES例が含まれhttps://jswebcrypto.azurewebsites.net/
でオンラインデモサイトを持っている昨年のプレゼンテーションを行いましたそしてここでもW3C Web Cryptography API
はSJCLの例です:
ハッシュ
var out = sjcl.hash.sha1.hash("The quick brown fox jumps over the lazy dog");
var hash = sjcl.codec.hex.fromBits(out)
// "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
HMAC
var key = sjcl.codec.utf8String.toBits("key");
var out = (new sjcl.misc.hmac(key, sjcl.hash.sha256)).mac("The quick brown fox jumps over the lazy dog");
var hmac = sjcl.codec.hex.fromBits(out)
// "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"
PBKDF2
var hmacSHA1 = function (key) {
var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha1);
this.encrypt = function() {
return hasher.encrypt.apply(hasher, arguments);
};
};
var passwordSalt = sjcl.codec.hex.toBits("cf7488cd1e48e84990f51b3f121e161318ba2098aa6c993ded1012c955d5a3e8");
var derivedKey = sjcl.misc.pbkdf2("password", passwordSalt, 100, 256, hmacSHA1);
var hexKey = sjcl.codec.hex.fromBits(derivedKey);
// c12b2e03a08f3f0d23f3c4429c248c275a728814053a093835e803bc8e695b4e
注:これはsjcl.js.に加えてsha1.jsを含んであなたを必要とし
13
これはもう少し遅いかもしれませんが、最近私はクライアントサイドの暗号化ハッシュを行う方法を検討しており、answer by Kevin Hakansonは非常に役に立ちました。デモサイトも非常に便利です! PBKDF2(HMACとSHA1)でカスタムPseudoRandom Functionを使用する方法を示していますが、渡されないとSJCLにデフォルトがあり、これを行う方法と、ランダムな塩を生成する方法を示したいと思いました。
私はまた、sjcl docsが非常に役に立ちました。
// Each random "word" is 4 bytes, so 8 would be 32 bytes
var saltBits = sjcl.random.randomWords(8);
// eg. [588300265, -1755622410, -533744668, 1408647727, -876578935, 12500664, 179736681, 1321878387]
// I left out the 5th argument, which defaults to HMAC which in turn defaults to use SHA256
var derivedKey = sjcl.misc.pbkdf2("password", saltBits, 1000, 256);
// eg. [-605875851, 757263041, -993332615, 465335420, 1306210159, -1270931768, -1185781663, -477369628]
// Storing the key is probably easier encoded and not as a bitArray
// I choose base64 just because the output is shorter, but you could use sjcl.codec.hex.fromBits
var key = sjcl.codec.base64.fromBits(derivedKey);
// eg. "2+MRdS0i6sHEyvJ5G7x0fE3bL2+0Px7IuVJoYeOL6uQ="
あなたは塩を保存したい場合、あなたはおそらくしたい:わずか3行なってしまう
ランダム塩を生成し、「パスワード」パスワードにPBKDF2を使用するには、あなたがこれを行うことができ、それをエンコードする
var salt = sjcl.codec.base64.fromBits(saltBits);
// eg. "IxC/6ZdbU/bgL7PkU/ZCL8vAd4kAvr64CraQaU7KQ3M="
// Again I just used base64 because it's shorter, but you could use hex
// And to get the bitArray back, you would do the exact opposite
var saltBits = sjcl.codec.base64.toBits(salt);
関連する問題
- 1. 良い暗号化/暗号化の本
- 2. スタンフォードJavascript暗号化ライブラリのPHPポートはありますか?
- 3. Javascriptの暗号化ライブラリ(クライアント側の暗号化|サーバー側の復号化)
- 4. As3暗号化ライブラリ
- 5. 暗号化ノードJs
- 6. CryptoJS暗号化に必要なJSライブラリ
- 7. 暗号化ライブラリを使用してCodeigniterで暗号化コードを生成 "/"ライブラリまたは暗号化ライブラリ
- 8. JS(CryptoJS)のC#での暗号化の暗号化
- 9. シーザー暗号暗号化Python
- 10. 例暗号化されたメディア拡張の暗号化
- 11. ノードjsの暗号化
- 12. 暗号ブロックチェーンの復号XOR「暗号化」
- 13. AES暗号化.NetとJs
- 14. OpenAM:RESTFUL API - 暗号化/暗号化パスワード
- 15. C#暗号化されたデータをJavascriptで暗号化する
- 16. Javascriptのコードの暗号化
- 17. HDFS暗号化|リモート例外
- 18. シーザー暗号の暗号化VB.net
- 19. ユーザパスワードを暗号化する2ウェイ暗号化のハンドル/ストア暗号化キー
- 20. JavaScript RSA暗号化とPHP
- 21. Javascript AES暗号化対SSL
- 22. 良い、安全な暗号化
- 23. カスタム暗号化暗号化/復号化ストリーム
- 24. Objective-CでSJCL暗号テキストを復号する
- 25. シーザー暗号シンプルな暗号化コード
- 26. 暗号++例外:
- 27. RSA暗号化/復号化
- 28. 暗号化/復号化soll
- 29. 暗号化と復号化
- 30. AES暗号化/復号化
そのWebサイトの例は本当に便利です、ありがとう! また、hmacSHA1関数を省略し、引数として渡さない場合は、デフォルトでhmac SHA256を使用します。 – janka102
@ kevin-hakansonあなたの答えを読んでいるうちに、 'PBKDF2'の例の関数' hmacSHA1'は何もしません - 同じキーがあればそれと一緒に返されます - http://jsfiddle.net/2802m8n5/。どうしてそれが起こっているのか教えていただけますか? – Shtirlits
Fiddle(http://jsfiddle.net/2802m8n5/1/)にsha1(sjcl.jsの一部ではない)を追加しました。https://github.com/bitwiseshiftleft/sjcl/blob/master/core/sha1.js –