有誰知道ruby是否實現了類似於PHP的openssl_seal函數?我希望能夠與運行this answer修改實現的服務器進行交互。 PHP解決方案非常簡單,如果我能找到一些Ruby來做同樣的事情,那將是非常棒的。Ruby的等價PHP openssl_seal
有人在一年前尋找相同的for python,但沒有找到任何東西。
有誰知道ruby是否實現了類似於PHP的openssl_seal函數?我希望能夠與運行this answer修改實現的服務器進行交互。 PHP解決方案非常簡單,如果我能找到一些Ruby來做同樣的事情,那將是非常棒的。Ruby的等價PHP openssl_seal
有人在一年前尋找相同的for python,但沒有找到任何東西。
EVP_Seal做簡單的小延伸使用RSA進行包裝,因此您可以使用OpenSSL功能手動執行此操作。
下面是一個PHP腳本,它與1個證書印章:
<?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密鑰)相當困難,所以你最好不要自己去嘗試。
的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的功能並不由OpenSSL紅寶石模塊外露,也不由openssl
命令行工具,所以如果你真的想追求這條路我猜你是到兩個選項:
信封加密做了兩兩件事:
如果這是在Ruby的綁定到OpenSSL,但你可以自己做,這將是很好。從本質上講,你做的是:
在這點,要解密CT到PT,你需要K1和IV。我們需要以安全的方式傳輸K1:使用
消費者現在需要扭轉這一進程。最終目標是將密文(CT)轉換回明文(PT)。爲此,我們需要撤消使用K1完成的對稱加密。
這樣的事情IV
除openssl_seal默認爲RC4,不包含IV。 – OneSneakyMofo 2016-07-13 14:48:50
感謝您的例子。我最終在PHP中編寫了'密封'例程,並從Ruby中解脫出來。不漂亮,但它的作品。 – 2011-03-14 10:43:25