[英]Ruby equivalent of PHP openssl_seal
有誰知道ruby是否實現了類似於PHP的openssl_seal函數的功能? 我希望能夠與運行此答案的修改實現的服務器進行交互。 PHP解決方案非常簡單,如果我能找到一些讓Ruby做到這一點的方法,那就太好了。
PHP文檔尚不清楚openssl_seal
確切功能,但是其來源很短(請在ext/openssl/openssl.c
查找PHP_FUNCTION(openssl_seal)
,在線此處http://svn.php.net/viewvc/ php / php-src / trunk / ext / openssl / openssl.c?view = markup )。
它是EVP_SealIinit()
, EVP_Seal_Update()
, EVP_Seal_Final()
序列的包裝(請參見http://www.openssl.org/docs/crypto/EVP_SealInit.html )。 據我所知,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腳本:
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
您也可以使用Ruby進行“密封”,但是創建安全的會話密鑰(在此示例中為RC4密鑰)相當困難,因此最好不要嘗試自己做。
信封加密有兩件事:
如果這是在Ruby與OpenSSL的綁定中,那會很好,但是您可以自己執行此操作。 本質上,您要做的是:
此時,要將CT解密為PT,需要K1和IV。 我們需要以安全的方式轉移K1:
消費者現在需要逆轉該過程。 最終目標是將密文(CT)轉換回純文本(PT)。 為此,我們需要撤消使用K1完成的對稱加密。
這樣的事情應該可以解決這個問題: https : //gist.github.com/1899731
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.