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가있는 문자열에 서명합니다..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에서 RSASignaturePadding을 사용하지 않는 SignData 메서드는 PKCS # 1 v1.5 서명 패딩을 수행합니다. 여기 파이썬에서 샘플은 PKCS # 1 v1.5 암호화 패딩 (다른 짐승) 또는 원시 (다른 짐승 짐승)를 사용 중일 수 있습니다 암호화하는 것으로 나타납니다; 서명은 개인 키 조작 인 반면 공개 키 조작을 사용합니다. – bartonjs
@bartonjs 대단히 감사합니다. 그런 유용한 주석이 있습니다. 그래서 암호화가 서명과 다르다는 것을 알았고 일부 Google이 개인 키를 사용하여 서명 할 것을 배웠습니다. 하지만 여전히 나는 사랑스런 결과물을 얻을 수 없으므로 서명 패딩에 대해 더 자세히 설명하고 pycrypto를 이러한 방식으로 강제 할 수 있습니까? –