javascript – 在ruby中使用sjcl.js创建的AES的解密

前端之家收集整理的这篇文章主要介绍了javascript – 在ruby中使用sjcl.js创建的AES的解密前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨,假设客户端有一个密钥不通过与加密数据相同的通道传输.

我想要完成的是在ruby中解密Stanford Javascript Crypto Library (sjcl)的结果.或者用于具有支持AES的加密库的任何其他语言的泛化.

这是我在javascript中所做的:

sjcl.encrypt('stack-password','overflow-secret')

这就是我得到的回报:

{
  "iv": "Tbn0mZxQcroWnq4g/Pm+Gg","v": 1,"iter": 1000,"ks": 128,"ts": 64,"mode": "ccm","adata": "","cipher": "aes","salt": "pMQh7m9Scds","ct": "H6JRpgSdEzKUw2qEO1+HwIzAdxGTgh0"
}

所以我实际要问的是,我需要哪些参数(假设服务器已经有“stack-password”密钥)以便解密秘密服务器端,我应该使用哪个库?
可能有AES解密库是不够的?

解决方法

对于那些来自谷歌的人,我设法使用sjcl库加密Appcelerator的Titanium并在Ruby / Rails上解密.

加密(javascript):

var data = SJCL.encrypt('your key here','plain text',{ mode: 'gcm',iv: SJCL.random.randomWords(3,0) });

重要的是使用较小的IV.

解密(ruby):

def self.decrypt(h)
  h = HashWithIndifferentAccess.new(JSON.parse(h))

  key = OpenSSL::PKCS5.pbkdf2_hmac('your key here',Base64.decode64(h[:salt]),1000,h[:ks]/8,'SHA256')

  puts "Key: #{key.unpack('H*')}"

  puts "Salt: #{Base64.decode64(h[:salt]).unpack('H*')}"

  c = OpenSSL::Cipher.new("#{h[:cipher]}-#{h[:ks]}-#{h[:mode]}")

  c.decrypt

  c.key = key

  c.iv = Base64.decode64(h[:iv])

  puts "IV: #{Base64.decode64(h[:iv]).unpack('H*')}"

  c.auth_data = ""

  c.update(Base64.decode64(h[:ct]))
end
原文链接:https://www.f2er.com/js/155550.html

猜你在找的JavaScript相关文章