2016-10-29 26 views
0

私は公開鍵、秘密鍵と暗号化されたメッセージ(e、n、d、message)を持っています。私は、PythonでOpenSSLを使って暗号化し、解読したいと思っています。OpenSSLを使用したPythonでのRSA暗号化と復号化

私はそれらを生成する必要はありません。私はRSAについて多くの質問を見ましたが、すべてがgenerateメソッドによってキーを作成します。私は暗号化と復号化の実行に関する疑問を見ていません。

Python Usomg OpenSSLでRSA暗号化と復号化を実行するにはどうすればよいですか?私が持っているもの


は以下です:

#Public key: 
e="65537" 

n="2483790199491205341506001624338547531741771200963322451" \ 
    "16318655098567854682220895878748602513720919196015584783557" \ 
    "704400541915850094004767776687" \ 
    "1238030112386627501698642461625407366533907839206541565912321199" \ 
    "009791795944233570230631191423356738502486763195167267521973031" \ 
    "6838578210434343067511636079081818744400113533624136339709745782" \ 
    "32161853372590090308494113224155565481298018056338822080805188480" \ 
    "139150684063550507331062187412707210886548924698896783031493679037" \ 
    "3122088161029787856707927049345768779125257912445784686277424030038" \ 
    "539380288863347855630618237433032833865316901740219" 


#Private key 
d="152501997096795110757068525202189319208625862269501399381045003" \ 
    "01373684948285528219578200125958795897780598922907027278290745917" \ 
    "4083840545807194541888429655727807270271016523695687179904011971106" \ 
    "46024638603131783118232131092639581621182826911051011196270811088775" \ 
    "8622627957416117004996969971673524599345136221501081814180958260506967" \ 
    "05549363779862358358393233189560520163106785535319492545898745183439" \ 
    "10980478364023104227720426942196244946117979269924656213962726626606" \ 
    "77452212629548965644705371048342816305068001182195025882564173365857" \ 
    "07762540909960941277936950557159506459454566798472128560135656506235" \ 
    "741389170953" 


#encrypted message 
encoded="187216163520278606105320112446137004408231369834741341053563682" \ 
     "277774349916058822189964158715390402738262899525931062389534962" \ 
     "09104749822344117450601254708536373034264130933521987327974000" \ 
     "255146756518397668069770185737907343422454676477169144712992560" \ 
     "738066894543224559303296179944700852861503983647039123452966586" \ 
     "43024446530008588087574157621730825724439869400851215840977916" \ 
     "767440706251849931986529460039147463908090086303953826751056882" \ 
     "5732583473943114017472152320746478960753673137088195122814398113" \ 
     "5288648561417818449968250721180493107501204327582989947582671" \ 
     "70231934908068721013345590521202959891172540575563129" 
+0

キーとメッセージの形式と試した内容を表示する必要があります。それが問題になるのは(少なくとも3つの理由で)トピックから離れていることです。それ以外に、働くオプションが示されている場合、それが安全であることをどのように知っていますか? –

+0

さて、あなたは正しいようです。私はPythonと 'RSA_encrypt'と' RSA_decrypt'を探しているときに飼育しています。たぶん、PyOpenSSLには関数のバインディングがありません。私はこの話題にいくつかの良い投稿と答えがあると思った。 – jww

+0

@jwwええ、実際には、ファイルからキーをインポートするimportKeyというメソッドがありますが、ファイルにキーを入れても失敗しました。 – eneski

答えて

1

暗号文がpyOpenSSLまたは他の外部のライブラリを使用せずに復号することができます。

は、単に次のように式メートル = CD MOD Nを用いた暗号化操作を逆:

n="24837..." 
d="15250..." 
encoded="18721..." 
plaintext = pow(int(encoded,10),int(d,10),int(n,10)) 
print hex(plaintext)[2:-1].decode('hex') 

pow()オペレータが(encoded**d) % nを計算するべき乗剰余演算を行います。 printステートメントでは、結果の値は16進数に変換され(最初の2文字の0xと最後の文字Lが削除されます)、元のバイトを取得するために16進数の文字列としてデコードされます。

パディングを使用せずにメッセージがエンコードされたため、これ以上の操作は必要ありません。

関連する問題