pycryptoでRSAの操作
# coding=utf-8 from Crypto.PublicKey import RSA from Crypto import Random random_func = Random.new().read rsa = RSA.generate(1024, random_func) # 秘密鍵作成 private_pem = rsa.exportKey(format='PEM', passphrase='hogehoge') with open('private.pem', 'w') as f: f.write(private_pem) # 公開鍵作成 public_pem = rsa.publickey().exportKey() with open('public.pem', 'w') as f: f.write(public_pem) # 公開鍵による暗号化 with open('cipher.txt', 'w') as f: f.write(rsa.publickey().encrypt(open('file.txt').read(), random_func)[0]) # 秘密鍵による復号化 with open('cipher.txt', 'r') as f: with open('plain_decoded.txt', 'w') as f2: f2.write(RSA.importKey(private_pem, 'hogehoge').decrypt(f.read())) # 秘密鍵による電子署名の作成 with open('file.txt', 'r') as f: with open('signature.bin', 'w') as f2: f2.write(str(RSA.importKey(private_pem, 'hogehoge').sign(f.read(), random_func)[0])) # 公開鍵による電子署名の検証 with open('signature.bin', 'r') as f: with open('file.txt', 'r') as f2: rsa.verify(f2.read(), (long(f.read()),))
opensslでだいたい同じ意味のコマンド
# RSA秘密鍵の作成 openssl genrsa -out private.pem -passout pass:hogehoge -des 1024 # RSA公開鍵の作成 openssl rsa -in private.pem -passin pass:hogehoge -pubout -out public.pem # 公開鍵による暗号化 openssl rsautl -encrypt -pubin -inkey public.pem -in plain.txt -out cipher.txt # 秘密鍵による復号化 openssl rsautl -decrypt -inkey private.pem -in cipher.txt -out plain_decoded.txt # 秘密鍵による電子署名の作成 openssl rsautl -sign -inkey private.pem -in plain.txt -out signature.bin # 公開鍵による電子署名の検証 openssl rsautl -verify -pubin -inkey public.pem -in signature.bin -out plain_decoded2.txt
OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―
- 作者: John Viega,Matt Messier,Pravir Chandra,齋藤孝道
- 出版社/メーカー: オーム社
- 発売日: 2004/08
- メディア: 単行本
- 購入: 4人 クリック: 89回
- この商品を含むブログ (25件) を見る
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/11/22
- メディア: 単行本
- 購入: 46人 クリック: 720回
- この商品を含むブログ (82件) を見る