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ライブラリの詳細―

OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―

新版暗号技術入門 秘密の国のアリス

新版暗号技術入門 秘密の国のアリス