Ruby等价于PHP openssl_seal
有人知道ruby是否实现了类似于PHP函数的功能吗?我希望能够与运行修改后的实现的服务器进行交互。PHP解决方案非常简单,如果我能为Ruby找到同样的解决方案,那就太好了Ruby等价于PHP openssl_seal,php,ruby,openssl,Php,Ruby,Openssl,有人知道ruby是否实现了类似于PHP函数的功能吗?我希望能够与运行修改后的实现的服务器进行交互。PHP解决方案非常简单,如果我能为Ruby找到同样的解决方案,那就太好了 一年前有人在寻找同样的东西,但没有找到任何东西。PHP文档有点不清楚openssl\u seal到底做了什么,但是它的源代码很短(在ext/openssl/openssl.c中查找PHP\u函数(openssl\u seal),在线这里) 它是EVP\u sealinit(),EVP\u Seal\u Update(),EVP
一年前有人在寻找同样的东西,但没有找到任何东西。PHP文档有点不清楚
openssl\u seal
到底做了什么,但是它的源代码很短(在ext/openssl/openssl.c
中查找PHP\u函数(openssl\u seal)
,在线这里)
它是EVP\u sealinit()
,EVP\u Seal\u Update()
,EVP\u Seal\u Final()
序列上的包装器(请参阅)。据我所知,OpenSSL Ruby模块和OpenSSL
命令行工具都没有公开这些OpenSSL函数,因此,如果你真的想走这条路,我想你有两个选择:
EVP_Seal使用RSA进行简单的包装,因此您可以使用OpenSSL功能手动进行包装 下面是一个用1个证书密封的PHP脚本:
<?php
$pubkey = openssl_pkey_get_public(file_get_contents('selfcert.pem'));
$message = 'hello,world';
$cipher_text = NULL;
$keys = NULL;
openssl_seal($message, $cipher_text, $keys, array($pubkey));
$file = fopen('wrapped.bin', 'wb');
fwrite($file, $keys[0]);
fclose($file);
$file = fopen('data.bin', 'wb');
fwrite($file, $cipher_text);
fclose($file);
?>
您也可以使用Ruby进行“密封”,但创建安全会话密钥(本例中为RC4密钥)相当困难,因此您最好不要自己尝试。信封加密有两个功能:
类似这样的东西应该可以做到这一点:谢谢您的示例。最后,我用PHP编写了“seal”例程,并从Ruby开始编写。不漂亮,但它可以工作。除了这个openssl_密封默认为RC4,它没有include IV。
require 'openssl'
wrapped = File.read('wrapped.bin')
cipher_text = File.read('data.bin')
privkey = OpenSSL::PKey::RSA.new(File.read('privkey.pem'))
key = privkey.private_decrypt(wrapped)
cipher = OpenSSL::Cipher.new('rc4')
cipher.decrypt
cipher.key = key
p cipher.update(cipher_text) + cipher.final