2017-05-08 6 views
0

암호화 된 페이로드를 해독 한 후 반환되는 문자열이 가비지 값일 경우 유효성을 검사하는 신뢰할 수있는 방법을 찾고 있습니다 (예 : = z { Z : k/ ˃ d A * Ԥ = ? M 5). 다른 공개 키를 사용하여 암호화 된 문자열의 암호를 해독하려고합니다. 예상대로 위에 게시 된 것과 같은 가비지 문자열이 표시됩니다. 내 질문은 C#에서 유효성을 검사하는 가장 좋은 방법은 반환 된 문자열이 유효한 문자열인지 또는 일부 가비지 값인지 여부입니다.잘못된 키로 Bouncy Castle rsa 암호 해독에서 반환 된 가비지 값의 유효성을 검사하는 방법

답변

0

반환 된 문자열은 ASCII (ASCII의 기술적 부분 집합) ... 당신의 이름과 성을 고려할 경우에만 확인합니다 제안 솔루션, 당신은 세상이 ASCII 문자열로 만들어지지 않았다는 직접적인 지식을 가지고 있어야합니다. 유니 코드는 이유 때문에 "발명 된"것입니다. 자, here로 작성된 RSA는 "전성"입니다. 아주 간단한 해결책은 모든 것을 암호화하기 전에 원본 텍스트의 해시를 추가하거나 (예 : SHA256 사용) 텍스트를 해독 한 다음 해독이 올바른지 확인하십시오.

+0

나는 더 깨끗한 방법이 될 것이라고 동의하지만, 내 시나리오에서는 문자열을 암호화하고 서버 쪽 코드에서 암호를 해독하기 때문에 클라이언트 측 변경이 필요하므로 동의해야합니다. 해결책. 또한, 문자열에만 문자가 포함되기를 기대하기 때문에 ASCII의 "하위 집합"만 고려해도 괜찮을 것이라고 생각합니다. – tavier

+0

btw, 그냥 호기심, 내 이름과성에 문제가있는 것. 영어로, 그것은 그 ASCII 문자의 부분 집합에 속합니다. :) – tavier

+0

@AshishAgrawal 아마도 미국 프로그래머의 절반이 모든 알파벳이 AZ 문자 세트에 포함되어 있다고 생각할 것입니다 ... 그들은 다른 언어가 àèéìòù와 같은 비 ASCII 문자를 필요로 할 수도 있다고 상상조차 할 수 없습니다 (중국어, 일본어 , 다양한 인도 언어 ...) ... 모든 정규식 질문에서 이것을 볼 수 있습니다 ("단어가 맞는지 어떻게 확인할 수 있습니까? [A-Za-z] *와 같은 것을 사용하십시오. 'AZ '가 네이티브 캐릭터 세트가 아닌 세계의 일부분으로부터 (또는 부모님이) 있어야합니다. – xanatos

0

RSA 만 사용하는 경우 PKCS # 1 v2.0에 정의 된대로 Optimal Asymmetric Encryption Padding (OAEP)과 같은 적절한 채우기 체계를 사용하십시오. 내부적으로 해싱을 사용하여 오류가 있는지 확인합니다. C#은 네이티브 지원을 가지고 있으며 깨진 암호문이나 잘못된 키가 사용 된 것과 같은 잘못된 일이 발생하면 오류가 발생합니다.

hybrid encryption (RSA + 일부 블록 암호)에 관심이 있으시면 AES-GCM (BouncyCastle을 통해 C#에서 사용 가능)과 같은 인증 된 작동 모드와 함께 RSA-OAEP를 사용하는 것이 좋습니다. 그렇게하면 모든 (악의적 인) 조작을 결정할 수 있습니다.