Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用cryptojs解密不起作用_Javascript_Ruby_Ruby On Rails 3_Cryptography_Cryptojs - Fatal编程技术网

Javascript 使用cryptojs解密不起作用

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

我试图通过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 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有关,因为页面正在重新加载,因为其中一个指定的图像路径不正确。事实上,我不知道这是你用过的同一个代码。你用过整个应用程序吗