CryptoJS AES在Rails中加密等效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CryptoJS AES在Rails中加密等效相关的知识,希望对你有一定的参考价值。

我在前端使用'crypto-js'包来加密这样的值:

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进行加密,这在目前阶段是不可能的,因为我已经使用相同的加密方法保存了大量记录。

任何人都可以建议什么是相当于该方法的rails?

答案

无法使用密钥和iv进行加密并在不使用密钥的情况下对其进行解密(反之亦然)。我不得不解密旧的加密数据并使用iv和密钥再次加密。

在前端(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)

以上是关于CryptoJS AES在Rails中加密等效的主要内容,如果未能解决你的问题,请参考以下文章

AES之CryptoJS加密与C#解密

关于CryptoJS中md5加密以及aes加密的随笔

php中的AES加密,然后用Javascript(cryptojs)解密

AES加密

aes 加密,解密

有关使用CryptoJS的AES方法进行加密和解密,后台获取前端生成的公钥进行AES加密。前端js如何使用私钥解密