C#에서 RSA 알고리즘을 사용하여 짧은 메시지를 암호화하고 python 스크립트를 사용하여 메시지의 암호를 해독하려고합니다..NET에서의 RSA 암호화, 파이썬에서의 암호 해독
저는 C# 측에 .NET 클래스를 사용하고 파이썬 측에 pycrypto을 사용하고 싶습니다. 나는 .NET이 표준 PEM/DER 형식을 직접 지원하지 않기 때문에 사소한 것이 아니었던 동일한 키를 사용하기 위해 양측을 관리했습니다. 암호화/복호화는 양측에서 독립적으로 작동합니다.
(I는 C# 측 (RSACryptoServiceProvider.Encrypt
false
에의 fOAEP
매개 변수를 설정)에 PKCS에게 # 1 패딩을 사용하고, 그래서 파이썬에서 블록 암호를 해독 한 후 나는 일반 텍스트의 어떤 종류를 볼 것으로 기대 즉 내를 함께 패딩 바이트 "메시지")
그러나 내가 보는 모든 쓰레기 :(이다.
내가 양쪽에 잘 모르는 것 같아요 어떤주의/함정이 있습니까? 나는 아이디어에서 가지입니다. ..thx 마틴
키 전송을 위해f = open(filename, "rb")
msg = f.read()
f.close()
decrypted = rsa.decrypt(msg)
print "Decrypted message:"
print_hex(decrypted)
샘플 코드
의 C#/암호화
Console.Write("Input string:");
var s = Console.ReadLine();
var b = Encoding.Default.GetBytes(s);
var encrypted = rsa.Encrypt(b, false);
using (var file = new FileStream(filename, FileMode.Create)) {
file.Write(encrypted, 0, encrypted.Length);
file.Flush();
file.Close();
}
파이썬/암호 해독 나는 RSACryptoServiceProvider
의 ToXmlString()
방법을 사용하고 있습니다. 생성 된 XML 파이썬을 파싱하고 pycrypto -RSA 객체 modulus
, exponent
, d
, p
및 q
가 특정 .NET RSAParameters
구조의 각각의 필드이다
r = Crypto.PublicKey.RSA.construct((modulus, exponent, d, p, q))
으로 초기화된다. (내가 언급했듯이, 파이썬에서이 키를 사용하여 메시지를 암호화/암호 해독 할 수 있습니다. p*q
수확량이 modulus
이므로 키 가져 오기가 올바르게 작동하는 것 같습니다 ...)
Java와 C# 사이에 동일한 문제가 있습니다. 가장 큰 문제는 두 언어간에 인코딩이 다르기 때문에 string.getbytes가 동일한 인코딩으로 처리해야한다는 것입니다. – Victor
현재 ASCII 문자 만 사용하고 있습니다. C#에서는 입력'byte []'매개 변수를'encrypt()'로 확인했습니다. 이것은 괜찮습니다. 파이썬은 8 비트 문자열 (최소한 버전 2.7)을 사용하며 바이트 수준에서 결과를보고 있으므로 인코딩 문제라고 생각하지 않습니다. 어쨌든 고마워! – MartinStettner
암호화/해독 코드의 일부 발췌 물을 게시 할 수 있습니까? – Jcs