2017-04-17 8 views
0
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
rsa.FromXmlString(PrivateKey); 

string data = "SAMPLE TEXT."; 

byte[] signedData = rsa.SignData(Encoding.UTF8.GetBytes(data), new 
SHA1CryptoServiceProvider()); 
string signedString = Convert.ToBase64String(signedData); 

上記のコードはxmlから読み込まれたPrivateKeyの文字列に署名します。Pythonは.NETのRSA.SignDataに相当します

Pythonで書き直してもらえますか?

私はこのコードを自分で作成しましたが、別の署名が作成されました。

from Crypto.PublicKey import RSA 
from Crypto.Util.number import bytes_to_long, long_to_bytes 
from hashlib import sha1 
import base64 

msg = "SAMPLE TEXT." 
hashed = sha1(msg.encode('utf-8')).digest() 
pubkey = RSA.construct((m,e)) 
encrypted = pubkey.encrypt(hashed, b'X')[0] 
print("Signature: {0}".format(base64.b64encode(encrypted))) 
+0

SignData(byte []、object)が何をしているのかについての適切な文書が見つかりませんでした.Netの参照元を調べてもこれに答えられませんでした。私はそれがシンプルなテキストブックのRSA呼び出しだと思うが、わからない。また、PKCS#1 v1.5パディングまたはPSSパディングを使用したRSA署名も可能です。 –

+1

RSACryptoServiceProviderのSignDataメソッドがRSASignaturePaddingを使用しない場合、PKCS#1 v1.5の署名埋め込みが行われます。ここのPythonのサンプルは、PKCS#1 v1.5暗号化パディング(別の獣)または生の(差分獣)を使用している可能性がある、暗号化されているようです。署名は秘密鍵操作ですが、公開鍵操作を使用しています。 – bartonjs

+0

@bartonjs非常に有用なコメントをいただきありがとうございます。私は暗号化が署名と違っていることを学びました。私は署名が個人鍵を使って行われることを教えてくれました。しかし、私は素敵な出力を得られないので、署名の埋め尽くされたことについてもっと説明することができます。そして、私はこの方法でpycryptoを強制することができますか? –

答えて

0

何の組み込みRSAライブラリは、私が知っているが、signingをサポートthis one (just named rsa)を見ていることを、Pythonではありません。

# importing rsa 
import rsa 

# generating a key 
(pubkey, privkey) = rsa.newkeys(512) 

# message 
message = 'Go left at the blue tree' 

# signing 
signature = rsa.sign(message, privkey, 'SHA-1') 

# verifying 
rsa.verify(message, signature, pubkey) # True 
+1

ありがとう、私は使用できます_ ** PyCryto ** _ –

+1

のような外部ライブラリは、リンクオンリーの回答ではありませんが、より多くの情報を提供することができます。リンクが死んでしまうと、ユーザーはあなたの説明を使用してgoogleにアクセスし、ライブラリの新しい場所を見つけることができるようにライブラリを説明することを検討してください。 –

+0

そのライブラリについて詳しく教えてください。リンクを張るだけでは不十分です!また、演算子は、生成するためにいくつかの数学演算を行うようにPythonでコードを書き直すことについて尋ねた!とにかくあなたが言及したライブラリはそれほど大したことではありません! –

関連する問題