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)))
SignData(byte []、object)が何をしているのかについての適切な文書が見つかりませんでした.Netの参照元を調べてもこれに答えられませんでした。私はそれがシンプルなテキストブックのRSA呼び出しだと思うが、わからない。また、PKCS#1 v1.5パディングまたはPSSパディングを使用したRSA署名も可能です。 –
RSACryptoServiceProviderのSignDataメソッドがRSASignaturePaddingを使用しない場合、PKCS#1 v1.5の署名埋め込みが行われます。ここのPythonのサンプルは、PKCS#1 v1.5暗号化パディング(別の獣)または生の(差分獣)を使用している可能性がある、暗号化されているようです。署名は秘密鍵操作ですが、公開鍵操作を使用しています。 – bartonjs
@bartonjs非常に有用なコメントをいただきありがとうございます。私は暗号化が署名と違っていることを学びました。私は署名が個人鍵を使って行われることを教えてくれました。しかし、私は素敵な出力を得られないので、署名の埋め尽くされたことについてもっと説明することができます。そして、私はこの方法でpycryptoを強制することができますか? –