そもそもやりたかったのはGoogleAppsScriptを使って加工したデータを定期的にメールで送りたかった。
その時に加工したファイルの中身を暗号化して送ったのでその方法を残しておく。
###JSで文字列の暗号化
JS側の暗号化にはCryptoJSを使った。
ココ見たらだいたいわかるのでURLだけ。
参照:https://code.google.com/p/crypto-js/
今回の暗号化にはAES-256-CBCを利用。
※CryptoJSはAES用、DES用等とそれぞれファイルが分かれているので使う際は必要なJSを持って来て使う。
と言ってもやったのはほぼサンプルと同じ。
通常のHTMLだとscriptで読み込めばいいが、GASは外部から読めないっぽかったので(ちゃんと調べてないけど)CryptoJSの中身をコピーして貼付けたら使えた。
encrypt.js
var encrypted = CryptoJS.AES.encrypt("Message", "pass");
// U2FsdGVkX1/XgapHlh8Ks+eIN1uaVOTMc14jRsaENNo=
###Rubyで文字列を復号化
Ruby側は特に目新しさはないけどこんな感じ。
このあんまりスマートじゃない感が半端ないんだけど・・・とりあえずこんなロジックで複号化出来た。
decrypt.rb
require "openssl"
require "base64"
def decrypt(base64str, password)
decoded_str = Base64.decode64(base64str)
salt = decoded_str[8..15]
data = decoded_str[16..-1]
cipher = OpenSSL::Cipher::Cipher.new('AES-256-CBC')
cipher.decrypt
cipher.pkcs5_keyivgen(password, salt, 1)
return cipher.update(data) + cipher.final
end
一応使い方。
hoge.rb
decrypt("U2FsdGVkX19xK0UNaoIs5QZxZlYFOiwiVu1BY5LUHS8=","pass")
#=> "Message"
一番最初に暗号化した"Message"って文字が戻ってきて幸せw