最近和京東合作做一個項目,在接口對接傳遞參數時,參數需要通過AES加密解密。
本來想到用gem 'aescrypt'處理,但是aescrypt的編碼方式用的base64,而京東那邊用的是16進制。所以就自己寫了加密解密方法。
AES 加密
def aes_encrypt(key, encrypted_string)
aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
aes.encrypt
aes.key = key
txt = aes.update(encrypted_string) << aes.final
txt.unpack('H*')[0].upcase
end
AES 解密
def aes_dicrypt(key, dicrypted_string)
aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
aes.decrypt
aes.key = key
aes.update([dicrypted_string].pack('H*')) << aes.final
end
其中參數key,是aes加密解密的秘鑰。encrypted_string和dicrypted_string是加密和解密字符串。
“AES-128-ECB”是秘鑰長度算法模式,秘鑰長度有128和256兩種。算法模式有"CBC", "ECB","CFB","OFB"可以選擇。
