문제

다음 기능을 호출 할 때 :

byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true);

나는 이제 오류가 발생하고 있습니다 : 나쁜 길이.

작은 문자열이 작동하면 문제가 발생할 수있는 문제는 200 자 미만입니다.

도움이 되었습니까?

해결책

RSA 암호화는 소량의 데이터에 대해서만 평균이며, 암호화 할 수있는 데이터의 양은 예를 들어 1024 비트 RSA 키 및 PKCS # 1 v1.5 패딩과 같은 키의 크기에 따라 다르면 암호화 할 수 있습니다. 최대 117 바이트, 2048 RSA 키를 사용하면 245 바이트를 암호화 할 수 있습니다.

이에 대한 좋은 이유가 있습니다. 비대칭 암호화는 계산적으로 비쌉니다. 많은 양의 데이터를 암호화하려면 대칭 암호화를 사용해야합니다. 그러나 비교를 원한다면 어떻게해야합니까? 그때 당신이하는 일은 둘 다 사용하는 것입니다. 대칭 키를 생성하고 비대칭 암호화를 사용하여 교환 한 다음 대칭 키를 안전하게 교환하여 대량의 데이터를 암호화합니다. 이것이 커버 아래의 SSL 및 WS-Secure 사용입니다.

다른 팁

RSA 나쁜 길이 예외에 관한 향후 검색 ...

다음과 같이 특정 키 크기로 암호화 할 수있는 최대 바이트 수를 계산할 수 있습니다.

((KeySize - 384) / 8) + 37

그러나 최적의 비대칭 암호화 패딩 (OAEP) 매개 변수가 원래 게시물과 마찬가지로 MAX 바이트를 계산하는 데 사용될 수 있습니다.

((KeySize - 384) / 8) + 7

법적 키 크기는 16384 년까지 384이며 스킵 크기는 8입니다.

위에서 설명한 바와 같이, '불량 길이'유형 예외에 대한 솔루션은 대칭 및 비대칭 암호화의 사용을 혼성화하여 암호화하는 텍스트의 크기가 키 크기에 의해 제한되지 않도록하는 것입니다. 기본적으로 RSA 암호화를 사용하여 무작위를 비대칭 적으로 암호화합니다. 열쇠 .

암호화 :

  1. AES 또는 Rijndael과 같은 대칭 암호화 기술에 필요한 길이의 무작위 키를 생성하십시오.

  2. 1 단계에서 생성 된 랜덤 키를 사용하여 AES/Rijndael을 사용하여 텍스트/데이터를 대칭 적으로 암호화합니다.

  3. RSA를 사용하여 1 단계에서 생성 된 랜덤 키를 비대칭 적으로 암호화합니다.

암호 해독 :

  1. 먼저 개인 RSA 키를 사용하여 AES/Rijndael 생성 랜덤 키를 해독합니다.

  2. 그런 다음 RSA 결정된 랜덤 키를 사용하여 원본 텍스트/데이터를 해독합니다.

데모를 위해 C#에서 다음 예를 살펴보십시오.

http://www.technical-recipes.com/2013/using-rsa-to-encrypt-large-files-in-c/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top