2017-09-14 129 views
1

我使用「加密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在前端進行加密,這在現階段是不可能的,因爲我已經使用相同的加密方法保存了很多記錄。

任何人都可以請建議什麼將是軌道相當於該方法?

回答

0

無法使用密鑰&進行加密,並且不使用密鑰進行解密(反之亦然)。我不得不解密舊的加密數據,並使用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)