解密使用Ruby在命令行上生成的salted AES文件
发布时间:2020-12-16 20:46:05 所属栏目:百科 来源:网络整理
导读:我想解密以前使用OpenSSL命令行工具加密的ruby 2.1脚本中的文本文件: openssl enc -aes-256-cbc -a -salt -in my_file 如命令中所示,该文件是AES-256-CBC加密,盐渍和base64编码. 密码是已知的,但不是IV和密钥,这是从ruby documentation获取的遵循此代码段所
我想解密以前使用OpenSSL命令行工具加密的ruby 2.1脚本中的文本文件:
openssl enc -aes-256-cbc -a -salt -in my_file 如命令中所示,该文件是AES-256-CBC加密,盐渍和base64编码. 密码是已知的,但不是IV和密钥,这是从ruby documentation获取的遵循此代码段所必需的: decipher = OpenSSL::Cipher::AES.new 256,:CBC decipher.decrypt decipher.key = key decipher.iv = iv plain = decipher.update(encrypted_text) + decipher.final 在试图找到答案的同时,我发现了gem AESCrypt gem,它可以简化en-and decrypting,但目前发布的版本与ruby 2.1不兼容. 所以我尝试了以下运行: encoded_and_encrypted_text = File.read my_file_path encrypted_text = Base64.decode64 encoded_and_encrypted_text.to_s.strip decipher = OpenSSL::Cipher::AES.new 256,:CBC decipher.decrypt decipher.key = OpenSSL::Digest::SHA256.new(my_password).digest plain_text = decipher.update(encrypted_text) + decipher.final 但这会导致OpenSSL :: Cipher :: CipherError:解密错误. 我是否需要以某种方式专门处理文件被腌制?我在OpenSSL documentation for the 任何建议将受到高度赞赏:) 解决方法
OpenSSL使用自定义标头和密钥派生例程.
Security.SE has a good description of the header和
docs for
EVP_BytesToKey 描述了密钥推导.
我们可以修改你的代码,使用这个奇怪的,有点破坏的密钥派生如下: encoded_and_encrypted_text = File.read my_file_path encrypted_text = Base64.decode64 encoded_and_encrypted_text.to_s.strip header = encrypted_text[0,8] salt = encrypted_text[8,8] payload = encrypted_text[16..-1] decipher = OpenSSL::Cipher::AES.new 256,:CBC decipher.decrypt D_1 = OpenSSL::Digest::MD5.new(my_password + salt).digest D_2 = OpenSSL::Digest::MD5.new(D_1 + my_password + salt).digest D_3 = OpenSSL::Digest::MD5.new(D_2 + my_password + salt).digest decipher.key = (D_1 + D_2) decipher.iv = D_3 plain_text = decipher.update(payload) + decipher.final (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |