CryptoJS AES加密等效于滑轨
问题描述:
我使用“加密JS”包在前端像这样的值进行加密:CryptoJS AES加密等效于滑轨
import CryptoJS from 'crypto-js';
var value_to_encrypt = '1-2345-689'
var encrypted_value = CryptoJS.AES.encrypt(value_to_encrypt, 'my_secret_key').toString()
==> 'U2FsdGVkX1/JWm47UWAgxMKyf2qC6EukAtk0pZbW3pk='
对于后端,我使用的Rails OpenSSL的是这样的:
cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
cipher.encrypt
cipher.key = 'my_secret_key'
text = cipher.update("1-2345-689") + cipher.final
encrypted_value = Base64.strict_encode64(text)
==> 'pBTaRw/fZTRkrw4THDCGLQ=='
我发现很少的解决方案,但他们都建议使用128位密钥和iv在前端进行加密,这在现阶段是不可能的,因为我已经使用相同的加密方法保存了很多记录。
任何人都可以请建议什么将是轨道相当于该方法?
答
无法使用密钥&进行加密,并且不使用密钥进行解密(反之亦然)。我不得不解密旧的加密数据,并使用iv和key再次加密。
在前端(reactJs):
import CryptoJS from 'crypto-js';
const iv = CryptoJS.enc.Base64.parse(INITIALIZATION_VECTOR)
const key = CryptoJS.enc.Hex.parse(ENCRYPTION_KEY)
encrypted_value = CryptoJS.AES.encrypt(input, key, {mode: CryptoJS.mode.CBC, iv : iv}).toString()
decrypted_value = CryptoJS.AES.decrypt(input, key, {mode: CryptoJS.mode.CBC, iv : iv}).toString(CryptoJS.enc.Utf8)
在后端(Ruby on Rails的):
iv = Base64.decode64(INITIALIZATION_VECTOR)
key = [ENCRYPTION_KEY].pack("H*")
cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
cipher.encrypt
cipher.key = key
cipher.iv = iv
text = cipher.update(plain_text) + cipher.final
encrypted_text = Base64.strict_encode64(text)