개인 RSA 키로 일부 데이터를 암호화 한 다음 공개 키를 사용하여 클라이언트 컴퓨터에서 해독하려고합니다. 내가 아는 한, 이것은 RSA를 사용하는 일반적인 방법입니다. 그러나 지금까지 보았 듯이 .NET Framework의 RSACryptoServiceProvider
에는이 문제가 있습니다. RSACryptoServiceProvider
에 공용 키와 개인 키를 모두 제공 할 때 해독이 올바르게 작동하지만 공개 키만 제공 할 때는 해독하지 않습니다.공개 키를 사용하여 암호 해독
Error occurred while decoding OAEP padding.
at System.Security.Cryptography.RSACryptoServiceProvider.DecryptKey(SafeKeyHandle pKeyContext, Byte[] pbEncryptedKey, Int32 cbEncryptedKey, Boolean fOAEP, ObjectHandleOnStack ohRetDecryptedKey)
at System.Security.Cryptography.RSACryptoServiceProvider.Decrypt(Byte[] rgb, Boolean fOAEP)
참고 :
- 내가
true
에fOAEP
세트 해독 암호화 /이 경우, 나는 패딩 오류가 발생합니다. - 1024 키 크기를 사용하며 암호화하려는 데이터가 65 바이트를 넘지 않습니다.
- XML에서 내 키를로드합니다.
sth가 누락 되었습니까? 내가 바꿀 수있는 패딩에 대한 설정이 보이지 않습니다.
확실히, 나는
내가 탄력이 성 같은 다른 라이브러리를 시도해야 클라이언트 컴퓨터에 내 개인 키를 ... 보낼 수 없습니다?
내가 this 질문을 찾았지만 명확한 해결책이 없으며 저자에 따르면 그의 최종 해결책은 this article의 코드를 사용하는 것이 었습니다. 그러나 가능하면 .NET Framework의 코드를 사용하는 편이 좋으며 왜 암호 해독이 실패하는지 이해할 수 없습니다.
또한 내 데이터가 너무 길어서 this answer이 적합하지 않다고 생각하지 않습니다.
아마도 SignHash()/VerifyHash()를 사용할 수는 있지만 이미 계산 된 해시가있는 동안 데이터를 암호화하기 전에 데이터에서 해시를 계산한다고 생각하고 암호화해야합니다. SignHash()를 사용하면 내가 사용할 수있는 해싱 알고리즘의 다양성이 제한되므로 피할 것을 권장합니다.
"개인 RSA 키로 일부 데이터를 암호화 한 다음 공개 키를 사용하여 클라이언트 컴퓨터에서 해독하려고합니다." 나는 당신이 그것을 뒤로 잡았다 고 생각합니다. 개인 키로 만 해독 할 수 있지만 공개 키로 암호화 할 수 있습니다. –
@Steven V : 일부 데이터의 원본을 인증하는 데 사용되는 해시에 서명 할 때 (디지털 서명 추가) 서명이 개인 키를 사용하여 암호화 된 암호화 된 해시가 아닙니까? 그것이 내가하고 싶은 일입니다. – NoOne
http://en.wikipedia.org/wiki/Public-key_cryptography "각 사용자에게는 공개 암호화 키와 개인 암호 해독 키의 두 쌍의 암호화 키가 있습니다." – Orch