2014-11-12 3 views
2

향후 Linux 프로젝트에서 C#의 일부 코드를 Mono로 이식하려고합니다. 실행 또는 RSA 서명이 코드를 디버깅 할 때Mono가 RSA 서명을 위해 해시 알고리즘으로 SHA1을 인식하지 않습니다.

A System.Security.Cryptography.CryptographyException was thrown; sha1 is an unsupported hash algorithm for RSA signing"

:

byte[] bytesSing = rsa.SignHash(hashValue, "SHA1"); 

내가 VS2010으로 확인하고 참조가 그것이 내가 전달되는 문자열이어야합니다 말한다

모노이 오류를 출력 "SHA1". 이것은 Windows에서 컴파일되고 실행되었지만 Mono에서 컴파일되거나 실행되지 않습니다.

여기 모노의 source code입니다.

답변

4

연결된 소스 코드 파일을 기반으로 SignHash 함수는 전달할 문자열이 OID라고 가정하고 바로 위의 GetHashNameFromOID 함수에서 찾도록 시도합니다.

The hash algorithm identifier (OID) used to create the hash value of the data.

Microsoft implementation 아마 이름 또는 OID 중 하나를 받아들이는 최대 X509Utils.NameOrOidToAlg를 통해 매개 변수를 찾습니다

Mono documentation

는 다음과 같이 해당 매개 변수를 문서화이를 지원합니다.

따라서 작동 시키려면 null을 Mono 버전으로 전달하거나 OID "1.3.14.3.2.26"을 전달할 수 있어야합니다.

+0

많은 감사 pmcoltrane! 그것은 이제 완벽하게 작동합니다! (이 스레드를 어떻게 닫을 수 있습니까?) – Glas

+0

@Glas 당신은 그렇지 않습니다. 질문은 사이트에서 환영받지 못하면 닫힙니다. 가장 좋아하는 답변 만 수락하십시오. 누군가 다른 사람이오고 또 다른 대답을 올리는 것 같습니다. – CodesInChaos