Tag: openssl

为什么在PHP中加密的东西与在Ruby中加密的相同字符串不匹配?

这是我的要求: 我需要使用AES加密(包括随机iv)在PHP中加密字符串,对其进行Base64编码,然后对其进行URL编码,以便将其作为URL参数传递。 我试图在PHP和Ruby中获得相同的结果,但我无法使其工作。 这是我的PHP代码: function encryptData($data,$iv){ $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, ”, MCRYPT_MODE_CBC, ”); $iv_size = mcrypt_enc_get_iv_size($cipher); if (mcrypt_generic_init($cipher, ‘g6zys8dlvvut6b1omxc5w15gnfad3jhb’, $iv) != -1){ $cipherText = mcrypt_generic($cipher,$data ); mcrypt_generic_deinit($cipher); return $cipherText; } else { return false; } } $data = ‘Mary had a little lamb’; $iv = ’96b88a5f0b9efb43′; $crypted_base64 = base64_encode(encryptData($data, $iv)); 这是我的Ruby代码: module AESCrypt def AESCrypt.encrypt(data, key, […]

使用Ruby实现HTTPS证书/ pubkey固定

我有自己的HTTPS服务,我正在与另一个Ruby应用程序交谈。 我想在我的app repo中的已知时间点保存它的公钥证书,并将服务发送给我的公钥与存储的副本进行比较。 要在外部服务器上安装证书,我可能需要将其转换为某种格式,因此服务器发送的文件不会相同。 我想对那个特定的公钥进行各种修改。 我需要使用OpenSSL比较哪些证书字段来validation从服务收到的PK是否与从服务器收到的PK相同? 我想CN和签名必须至少匹配。 还有什么需要检查才能知道我所拥有的公共证书与我收到的证书完全一致(即证书是否相同)? 也许OSSL有一个内置的设施吗?

openssl smime in ruby​​ / rails

所以,我有这个应用程序,创建一个带有图像和东西的zip文件 我想用smime签名。 如果我使用终端命令: openssl smime -binary -sign -passin “pass:MYPASS” -signer ./MyCertificate.pem -inkey ./MyKey.pem -in ./manifest.in -out ./signature.out -outform DER 格式化: openssl smime -binary -sign -passin “pass:MYPASS” \ -signer ./MyCertificate.pem -inkey ./MyKey.pem \ -in ./manifest.in -out ./signature.out -outform DER manifest.in是包含要签名的文本的文件, signature.out是输出文件。 我不太了解签名,但我相信这段代码是使用PKCS7签署我的文件 如何用ruby / rails重新创建相同的结果? 我试图查看OpenSSL的文档,但我找不到任何有用的东西 编辑 如果这有助于某人,这就是文档所说的内容 我需要建立一个: A detached PKCS#7 signature of the manifest

如何在ruby中重构OpenSSL pkcs5_keyivgen?

我在过去的一年里在我的应用程序中使用了以下代码,使用此代码有200k记录: options = { :algorithm => ‘aes-256-cbc’, :value => “changethis”, :key => “secretkey” } cipher = OpenSSL::Cipher::Cipher.new(options[:algorithm]) cipher.send(:encrypt) cipher.pkcs5_keyivgen(options[:key]) result = cipher.update(options[:value]) result < “x\xED\x14s\xFD\x0E\x97\xC5\x996[M\x1E\x94\xDEI” 我需要(按业务)重构pkcs5_keyivgen部分,以正确执行:例如, options = { :algorithm => ‘aes-256-cbc’, :value => “changethis”, :key => “secretkey” } cipher = OpenSSL::Cipher::Cipher.new(options[:algorithm]) cipher.send(:encrypt) cipher.key = ” # ??? 1) How does pkcs5_keyivgen in above code […]

如何在ruby中为OpenSSL设置ca-bundle路径

我在ruby中遇到问题,OpenSSL无法validationSSL证书。 我认为这是由脚本不知道ca-bundle.pem引起的。 是否有可能手动配置ca-bundle.pem的路径?

Net :: HTTP中的服务器名称指示支持?

我正在尝试让Ruby的Net::HTTP实现与SNI一起使用。 mail.google.com和gmail.com都位于相同的IP地址上,因此当通过SSL连接时,Google服务器需要知道要使用的证书。 默认情况下,它会返回mail.google.com证书,如果您尝试实施WebFinger,则会出现问题。 WebFinger要求您检索https://gmail.com/.well-known/host-meta以获取LRDD信息,但是,出于安全原因,validationSSL证书信息至关重要。 由于Google在这种情况下提供默认的mail.google.com证书,因此SSL post_connection_check失败。 这里正确的解决方案是为Net::HTTP启用服务器名称指示,但我不清楚如何使用OpenSSL的Ruby绑定。 其他人有想法吗? 您应该能够通过运行来查看问题: require ‘open-uri’ open(‘https://gmail.com/.well-known/host-meta’) { |f| f.read } 我还创建了一个使用早期版本的curl和OpenSSL来展示问题的要点: https://gist.github.com/7936ef38787092a22897

Ruby中的Rijndael AES-128加密解密

我想在ruby中使用rijndael aes128进行加密。 我有这个代码: cipher = OpenSSL::Cipher::Cipher.new(“aes-128-cbc”) cipher.encrypt cipher.key = ‘abcdef0123456789abcdef0123456789’ cipher.iv = ‘0000000000000000’ encrypted = cipher.update(‘2~1~000024~0910~20130723092446~T~00002000~USD~F~375019001012120~0~0~00000000000~’) encrypted << cipher.final 这是行不通的。 但是使用这个PHP函数: <?php function hex2bin($hex_string) { return pack('H*', $hex_string); } $data_to_encrypt = '2~1~000024~0910~20130723092446~T~00002000~USD~F~375019001012120~0~0~00000000000~'; $key = 'abcdef0123456789abcdef0123456789'; $iv = '0000000000000000'; $key = hex2bin($key); $iv = hex2bin($iv); $data_encrypted = bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data_to_encrypt, MCRYPT_MODE_CBC, $iv)); echo "Data encrypted: ".strtoupper($data_encrypted)."”; […]

如何在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 编辑清晰

Lion:RVM安装rubies的问题 – 与openssl相关的问题

我已经绝望了,现在两个(!!)天都没有解决方案来解决以下问题。 在对Lion进行更新后,我想使用最新版本的rvm安装其他ruby。 以下是我之后调用bundler时会发生的事情: /Users/felix/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’: dlopen(/Users/janroesner/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/x86_64-darwin11.1.0/digest/sha1.bundle, 9): Symbol not found: _SHA1_Init (LoadError) 好的,openssl问题。 所以我检查了没有openssl但是/ usr中的系统有/ usr / lib中的库和/ usr / include / openssl中的头文件。 校验。 我决定用brew安装一个更新的版本。 之后,没有ruby编译已经定义了BN_rand_range和BN_peudo_rand_range的错误。 似乎是对最近的gcc进行更严格的类型检查,所以我在/usr/include/openssl/bn.h中取消注释导致冲突的411和412行导致ruby定义它们自己。 现在ruby编译但我收到相同的错误符号未找到:_SHA1_Init。 所以我删除了openssl头文件bn.h中的注释,我之前放在那里并尝试相反的方法。 我在〜/ .rvm / src / ruby​​-1.9.2-p290 / ext / openssl / openssl_missing.h中对这些行进行了评论。 结果相同。 之后我完全删除了〜/ .rvm,重新安装它并且……有同样的问题。 现在我试过了: rvm pkg install openssl rvm remove 1.9.2-p290 rvm install 1.9.2-p290 […]

connect:SSL_connect返回= 1 errno = 0 state = SSLv3读取服务器证书B:证书validation失败(OpenSSL :: SSL :: SSLError)

我很难获得SSL来validation证书。 我完全不了解证书的运作方式,因此这是一个很大的障碍。 这是运行脚本时出现的错误: c:/Ruby191/lib/ruby/1.9.1/net/http.rb:611:in `connect’: SSL_connect returned=1 e rrno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL ::SSL::SSLError) 这是相关的代码: client = Savon::Client.new order_svc request = client.create_empty_cart { |soap, http| http.auth.ssl.cert_file = ‘mycert.crt’ http.auth.ssl.verify_mode = :none http.read_timeout = 90 http.open_timeout = 90 http.headers = { “Content-Length” => “0”, “Connection” => “Keep-Alive” } soap.namespaces[“xmlns:open”] = “http://schemas.datacontract.org/2004/07/Namespace” […]