JavaScriptで暗号化した文字列をRubyで復号化してみた
という記事の逆をやってみたいと思ってみました。
JavaScript側では、CryptJSを使ってRuby側で暗号されたものを
var text = CryptoJS.AES.decrypt(data, "pass").toString(CryptoJS.enc.Utf8);
で複合化をできるようにRuby側で暗号化したいと思います。
Ruby側で暗号化された値が上記のdataに入る感じです。
Ruby側は以下のような感じです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "openssl" | |
require "base64" | |
def encrypt(data, passwd) | |
enc = OpenSSL::Cipher.new("AES-256-CBC") | |
enc.encrypt | |
salt = OpenSSL::Random.random_bytes(8) | |
enc.pkcs5_keyivgen(passwd, salt, 1) | |
enc_data = enc.update(data) + enc.final | |
ret = "Salted__" + salt + enc_data | |
ret = Base64.encode64(ret).encode("utf-8").chomp | |
return ret | |
end |
これを使ってruby側で
enc_data = encrypt(”hogehoge”,"pass")
としてできた、enc_dataの内容をJavascript側のdataに入れてやれば、hogehogeと戻せる感じでした。