- python-crypto - 這個模組是基本模組,使用的函式太複雜了,不會用。
- ezPyCrypto - 這個簡單些了,但他作出來的公私鑰無法與其他程式相容(這一點,我也不知道為什麼)。
- SSLCrypto - 與 ezPyCrypto 是相同作者,而這個模組的效率比 ezPyCrypto 好。但一樣不能與其他程式相容。
- pyopenssl - 作者說他不欣賞 M2Crypto 與 SWIG 介接的方式,是的,我也不欣賞。但 pyopenssl 似乎是用 https 通訊上的,而我找不到加解密的用法。
- M2Crypto - 終於讓我找到了。但它有一大缺點。它底層是用 SWIG 來與 OpenSSL 介接的,而 SWIG 程式在 Windows 上非常難裝。
- 先安裝 python2.4-pyrex 、 libssl-dev 、 swig 。
- 到 m2crypto 資料夾執行 sudo python setup.py install
# openssl genrsa -out rsaprivate.pem 2048
# openssl rsa -in rsaprivate.pem -out rsapublic.pem -pubout -outform PEM
這樣我們就有兩支鑰匙了。接下我們用 Python with 私鑰 加密。
from M2Crypto import RSA
def test_encrypt(padding):
----msg="The magic words are squeamish ossifrage."
----priv=RSA.load_key('rsaprivate.pem')
----padding=eval('RSA.'+padding)
----ctxt=priv.private_encrypt(msg, padding)
----file = open(' c.txt', 'wb')
----file.write(ctxt)
if __name__ == '__main__':
----test_encrypt('pkcs1_padding')
我們得到了 c.txt 這個加密檔。好了,接下來,要到 Windows 去冒險了。
請先安裝 openssl.exe ,版本須大於 0.9.8 喔~
接下來設定 php.ini ,把 ;extension=openssl.dll 的註解拿掉,重新啟動 Apache2 。這樣你的 PHP 就多了 openssl 相關函式庫了。
接下來執行下面的 PHP 程式,它會用公鑰來解密,最後會得到「String decrypt : The magic words are squeamish ossifrage.」。恭喜你啦。公私鑰加解密就這麼簡單。
<?php
$fp=fopen ("rsapublic.pem","r");
$pub_key=fread($fp,8192);
fclose($fp);
$fp=fopen ("c.txt","r");
$crypttext=fread($fp,8192);
fclose($fp);
openssl_get_publickey($pub_key);
openssl_public_decrypt($crypttext,$newsource,$pub_key);
echo "String decrypt : $newsource\n";
?>
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。