Javascript 使用cryptojs解密不起作用
我试图通过json向客户端发送加密数据,并在客户端使用cryptojs对其进行解密 我的ROR代码Javascript 使用cryptojs解密不起作用,javascript,ruby,ruby-on-rails-3,cryptography,cryptojs,Javascript,Ruby,Ruby On Rails 3,Cryptography,Cryptojs,我试图通过json向客户端发送加密数据,并在客户端使用cryptojs对其进行解密 我的ROR代码 def getkey aes = OpenSSL::Cipher::Cipher.new('AES-128-CBC') aes.encrypt key = aes.random_key session[:key] = key render :json => {:mkey => Base64.encode64(key).gsub(/\n/, '')} end
def getkey
aes = OpenSSL::Cipher::Cipher.new('AES-128-CBC')
aes.encrypt
key = aes.random_key
session[:key] = key
render :json => {:mkey => Base64.encode64(key).gsub(/\n/, '')}
end
def getdata
js = "SOME DATA"
aes = OpenSSL::Cipher::Cipher.new('AES-128-CBC')
aes.encrypt
aes.key = session[:key]
encrypted = aes.update(js) + aes.final
encrypted = Base64.encode64(encrypted).gsub(/\n/, '')
render :json => {:data => encrypted}
end
我的Javascript代码
var key = btoa(BASE64_ENCODED_KEY);
$http({method: 'GET', url: '/appi/getdata/', params: {SOME_PARAMS}})
.success(function(data, status, headers, config) {
var dat = btoa(data.data);
var decrypted = CryptoJS.AES.decrypt(dat, key);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
});
在chrome中获取javascript错误“错误:格式错误的UTF-8数据”
下面是上述查询的简化JSFIDLE的url
谢谢owlstead,我最近几天就已经知道了 我在crypto js线程中提出了这个查询,问题是我没有在crypto js解密中指定IV,就像在Ruby中一样,如果您没有指定它添加的任何IV\0作为IV 下面是工作代码
var encrypted = {};
encrypted.ciphertext = CryptoJS.enc.Base64.parse(data.data);
var decrypted = CryptoJS.AES.decrypt(encrypted, CryptoJS.enc.Base64.parse(BASE64_ENCODED_KEY),
{ iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000') });;
console.log(decrypted.toString(CryptoJS.enc.Utf8));
这对我来说很有效,这个解决方案是Jeff.Mott.OR(当前cryptojs负责人开发人员)昨天提供给我的。如果响应有一个换行符,例如
“\r\n”
,您可以使用:
s = s.replace(/[\r\n]/g, '');
删除它们。decrypted.toString(CryptoJS.enc.Utf8)对我很有用。我正在使用解密的.toString()。无论如何,谢谢….@sudesh,这似乎是个问题..认为CryptoJs不能加密JSON对象..你能帮我吗..我也得到了同样的结果issue@sudesh我应该把它贴在哪里..它相当大..你能用chatvar data=angular.fromJson(strData)吗;var加密={};encrypted.ciphertext=CryptoJS.enc.Base64.parse(data.data);var decrypted=CryptoJS.AES.decrypt(加密的,CryptoJS.enc.Base64.parse(pki)){iv:CryptoJS.enc.Base64.parse(data.pki)};var mainData=decrypted.toString(CryptoJS.enc.Utf8);返回angular.fromJson(mainData);}]。concat($http.defaults.transformResponse),params:default_params,headers:headers}).success(函数(数据){var endApi=new Date();回调(数据);})@Sudesh感谢您的回复。我们了解了该问题并已着手解决该问题。该问题与chrome有关,因为页面正在重新加载,因为其中一个指定的图像路径不正确。事实上,我不知道这是你用过的同一个代码。你用过整个应用程序吗