Tag: 加密

为什么我不能使“OpenSSL with Ruby”和“Command line OpenSSL”可以互操作?

在尝试建立可互操作的加密系统时,我在轻松的“概念validation”期间遇到了一种奇怪的情况。 我在Ruby中编写了以下代码: 从我的文件系统上的虚拟文本文件创建加密文件 解密加密文件 与原始文件进行比较,并检查它们是否相同 这是代码: require ‘openssl’ require ‘base64’ # Read the dummy file data = File.read(“test.txt”) # Create an encrypter cipher = OpenSSL::Cipher::AES.new(256, :CBC) cipher.encrypt key = “somethingreallyreallycomplicated” cipher.key = key # Encrypt and save to a file encrypted = cipher.update(data) + cipher.final open “encrypted.txt”, “w” do |io| io.write Base64.encode64(encrypted) end # Create […]

从Ruby打开RSA私钥

我想我知道如何创建自定义加密RSA密钥,但是如何读取像ssh-keygen那样加密的密钥呢? 我知道我可以这样做: OpenSSL::PKey::RSA.new(File.read(‘private_key’)) 但是然后OpenSSL要求我提供密码……我怎样才能将它作为参数传递给OpenSSL? 而且,如何创建一个与ssh-keygen生成的兼容的? 我做这样的事情来创建私有加密密钥: pass = ‘123456’ key = OpenSSL::PKey::RSA.new(1024) key = “0000000000000000#{key.to_der}” c = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) c.encrypt c.key = Digest::SHA1.hexdigest(pass).unpack(‘a2’ * 32).map {|x| x.hex}.pack(‘c’ * 32) c.iv = iv encrypted_key = c.update(key) encrypted_key << c.final 此外,当我尝试无密码登录时,OpenSSL :: PKey :: RSA.new(1024)(没有加密)生成的密钥不起作用(即,我将公钥复制到服务器并使用私有密钥到登录)。 此外,当我通过OpenSSL打开一个ssh-keygen文件,然后检查其内容时,它似乎在键的开头和结尾有其他字符。 这是正常的吗? 我真的不了解这些安全性的东西,但我正在努力学习。 我做错了什么?

如何将128 CFB转换为Ruby?

我需要用PHP API来交换,它会隐藏请求和答案。 在我这边我是在rails 4.0.0(ruby 2.0),我无法使它工作。 我已经阅读了很多关于这个主题的答案,并试图了解mcrypt的工作原理,例如http://www.chilkatsoft.com/p/php_aes.asp ,但没有成功。 我仍然无法解密从PHP加密或加密PHP可以解密的东西 你能帮助我,看看我做错了什么吗? PHP代码: $secretKey = “1234567891234567”; $encrypt = urlencode( base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_128, md5($secretKey), $cleartext, MCRYPT_MODE_CFB, $secretKey ) ) ); $input = urldecode($input); $decrypt = mcrypt_decrypt( MCRYPT_RIJNDAEL_128, md5($secretKey), base64_decode($input), MCRYPT_MODE_CFB, $secretKey ); Ruby代码: def self.encode(params = {}) cipher = OpenSSL::Cipher::AES.new(256, :CFB) cipher.encrypt cipher.key = Digest::MD5.hexdigest(“1234567891234567”) cipher.iv = “1234567891234567” encrypted […]

使用ruby生成为/ etc / shadow格式化的SHA512 crypt-style哈希?

我想生成SHA512散列密码,以便直接包含在/ etc / shadow文件中,以便与chef的用户资源一起使用 。 通常我会去stdlib的Digest库,但它不会以正确的格式生成哈希: ruby-1.9.2-p136 :001 > require ‘digest/sha2’ => true ruby-1.9.2-p136 :002 > Digest::SHA512.hexdigest(‘test’) => “ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff” shadow文件想要的格式是: $6$/ShPQNXV$HJnibH9lw01qtYqyJQiBf81ggJB2BGUvKA7.kv39HGCeE.gD4C/SS9zAf5BrwOv3VJzvl99FpHYli9E8jykRC0 我看过的事情: openssl“dgst”模块返回与.hexdigest相同的格式,其“passwd”模块不包含SHA512支持。 String#crypt,但不支持SHA512。 (编辑:这只是OSX的情况 – 如果指定“$ 6 $ somesalt”作为盐,现代Linux发行版将起作用) ruby-crypt gem,但它不支持SHA512 为了比较,确实返回正确格式的东西是PHP的crypt ,但我宁愿不必向PHP执行简单的操作。

如何在Ruby中以hex执行Triple DES计算?

我正在尝试在Ruby中进行一些三重DES加密。 我正在尝试复制此页面的结果: http : //da.nmilne.com/des.html 我试图在Ruby中复制这些结果。 我怀疑问题是密钥应该是一个字符串,但我需要传入hex密钥。 要么加密的字符串格式错误。 或者两者都有。 🙂 require ‘openssl’ des = OpenSSL::Cipher::Cipher.new(“des-ede-cbc”) des.encrypt des.key=”23232323232323234545454545454545″ des.update(“0000000000000000”) res=des.final res.unpack(‘H*’) => [“5045c5d37ca4d13b”] 但它应该是: => [“3a42d7a1d1c60c40”] 关于我出错的地方的任何指示? 这里记录了不同的3DES算法: http : //www.openssl.org/docs/apps/enc.html 编辑清晰

如何使用SecretKeySpec加密ruby中的数据?

我正在尝试使用Cipher和AES算法加密ruby中的字符串。 我有用Java编写的示例。 我从这个例子中获得了帮助,并用Java编写了代码,但是无法获得与JAVA相同的输出。 以下是用java编写的代码 import java.util.Base64; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; import java.security.Key; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import java.util.Arrays; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; public class HelloWorld { public static final String PHONENUMBER_PARAM […]

如何解决OpenSSL :: Cipher :: Cipher#encrypt的弃用警告

我刚刚将我的Mac升级到Snow Leopard并启动并运行了我的Rails环境。 唯一的区别 – OSX除了 – 我以前的安装是我现在运行ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0] (Snow Leopard默认)而不是1.8.6 。 我现在在运行代码时看到与OpenSSL相关的弃用警告: warning: argumtents for OpenSSL::Cipher::Cipher#encrypt and OpenSSL::Cipher::Cipher#decrypt were deprecated; use OpenSSL::Cipher::Cipher#pkcs5_keyivgen to derive key and IV 在第4行引起这些警告(它解码加密字符串)的代码示例: 1. def decrypt(data) 2. encryptor = OpenSSL::Cipher::Cipher.new(‘DES-EDE3-CBC’) 3. key = “my key” 4. encryptor.decrypt(key) 5. text = encryptor.update(data) 6. text << encryptor.final 7. […]

rails加密/解密

我需要在我的rails应用程序中进行加密和解密。 我试图使用ezcrypto,但每当我解密时,我都会收到此错误。 OpenSSL::Cipher::CipherError in ProfilesController#show wrong final block length 需要更改什么才能阻止此错误。 我尝试使用这样的另一个openssl实现(从我的模型中调用的方法) def encrypt_attr(unencrypted) c = OpenSSL::Cipher.new(“aes-256-cbc”) c.encrypt c.key = Digest::SHA1.hexdigest(‘pass’) e = c.update(unencrypted) e << c.final return e end def decrypt_attr(encrypted_attr) if encrypted_attr != "" c = OpenSSL::Cipher::Cipher.new("aes-256-cbc") c.decrypt c.key = Digest::SHA1.hexdigest('pass') d = c.update(encrypted_attr) d << c.final return d end end 它会在解密时抛出完全相同的错误。 我应该如何进行加密和解密,而不是出现这个openssl错误。

Ruby on Rails解密

以下function在PHP中完美运行。 如何在Ruby on Rails中进行翻译。 请注意,privateKey和iv都是32个字符长。 mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $privateKey, base64_decode($enc), MCRYPT_MODE_CBC, $iv) 我尝试在Ruby中使用以下内容但是解密错误。 cipher = OpenSSL::Cipher.new(‘aes-256-cbc’) cipher.decrypt cipher.key = privateKey cipher.iv = iv decrypted = ” << cipher.update(encrypted) << cipher.final

Rails 4不加密cookie内容

你好我正在尝试加密和保护我的cookie中包含的数据,但似乎数据只被编码(base64) 这是一个例子: cookies.signed[:example] = { :value => ‘can you see this?’, :httponly => true, :expire_after => 30.minutes, :secure => true } 这是cookie的内容: BAhJIhZjYW4geW91IHNlZSB0aGlzPwY6BkVG–b4a8bbd7cd35e392ccd788df0008fd10b48442b2 如果我解码字符串(base64)我得到: I”can you see this?:EFom{q{vq{_M<}to8f 我想知道我错过了什么,目前这就是我所拥有的 session_store.rb: Service::Application.config.session_store :cookie_store, key: ‘_service_session’ 在我的secret_token.rb中我设置了这样的东西: Service::Application.config.secret_key_base = ‘e892d55cbc205bb6..’