流れは、
Javascript から サーバに パスワード付きで GET -> Ruby でパスワードを使ってAES暗号化->Base64エンコード文字列生成
-> Javascript で受け取る -> AES復号化処理をする
です。
CryptoJS
des.js
を使おうと試みましたが、うまくできません。
他の方法があれば教えてください。
ruby-onetimekeyをjavascriptから受け取って暗号化
ruby
1salt = “\x00\x01\x02\x03\x04\x05\x06\x07” 2 enc = OpenSSL::Cipher.new(‘AES-128-CBC’) 3 enc.encrypt 4 enc.key = OpenSSL::PKCS5.pbkdf2_hmac_sha1(onetimekey, salt, 65536, 128) 5 iv = enc.random_iv 6 a = enc.update(text) 7 b = enc.final 8require “base64" 9 return Base64.encode64 iv + a + b
Javascript
1var password = '6t70g5h624ero4b6ama7958829ck4f1l'; 2var xhr = new XMLHttpRequest(); 3xhr.onreadyStateChange = function() { 4 if(xhr.readyState === 4 && xhr.status === 200) { 5 var enctyptedData = xhr.response; 6 var decryptedData = 復号化する関数(password, enctyptedData); 7 } 8}; 9xmlHttpRequest.open('GET', 'http://hogehoge?' + password); 10 11
CryptJS では、
javascript
1decrypted = CryptoJS.AES.decrypt(xhr.response, password);
とやりましたが結果は
javascript
1init {words: Array(4), sigBytes: -226} 2sigBytes:-226 3words:(4) [-1167195665, -2012345878, -547270904, -1822799947] 4__proto__:Object
こういうものになりました。
得たい結果はjson文字列です
javascript
1string = decrypted.toString(CryptoJS.enc.Utf8);
を実行すると
javascript
1Uncaught Error: Malformed Utf8-data
とエラーとなります。
core.js - Utf8.stringifyの
javascript
1crypto-js/core.js 2 3 /** 4 * UTF-8 encoding strategy. 5 */ 6 var Utf8 = C_enc.Utf8 = { 7 /** 8 * Converts a word array to a UTF-8 string. 9 * 10 * @param {WordArray} wordArray The word array. 11 * 12 * @return {string} The UTF-8 string. 13 * 14 * @static 15 * 16 * @example 17 * 18 * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); 19 */ 20 stringify: function (wordArray) { 21 try { 22 return decodeURIComponent(escape(Latin1.stringify(wordArray))); 23 } catch (e) { 24 throw new Error('Malformed UTF-8 data'); 25 } 26 },
javascript
1decodeURIComponent(escape(Latin1.stringify(wordArray))
が試行エラーです
回答1件
あなたの回答
tips
プレビュー