2016-11-25 1 views
0

은 현재 내가 OpenSSL을 통해이 작업을 수행 C#에서 SHA256와 개인 키 파일 가져 오기를 나는우리는 C를 사용하여 파일의 생성을 자동화 할,

openssl dgst -sha256 -sign privateKey.key -out file.txt.signature file.txt 

이제 생성 된 파일에 아무 문제가 없었습니다 #하지만 같은 결과를 얻지 못했습니다.

public class Program 
{ 

    static void Main(string[] args) 
    { 
     Console.WriteLine(CreateToken("key...", "text")); 
     Console.ReadLine(); 
    } 

    public static string CreateToken(string key, string message) 
    { 
     System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
     byte[] keyByte = encoding.GetBytes(key); 

     HMACSHA256 hmacsha256 = new HMACSHA256(keyByte); 

     byte[] messageBytes = encoding.GetBytes(message); 
     byte[] hashmessage = hmacsha256.ComputeHash(messageBytes); 

     return System.Text.Encoding.UTF8.GetString(hashmessage); 
    } 

} 

나는 이걸로 일하는 것이 처음이다. 올바른 방법은 없을까?

정보를 제대로 검색하지 못합니까? 파일에서 직접 콘텐츠를 가져와야합니까?

대단히 감사합니다.

+0

일반적으로 메시지를 해싱하는 것 이상을 수행합니다. 공격과 방어의 좋은, 친밀한 역사를 보려면 [RSA 서명과 Rabin-Williams 서명 : 최신 기술] (https://cr.yp.to/sigs/rwsota-20080131.pdf)을 참조하십시오. 섹션 5, * 해시 무작위 화 *, 당신에게 관심 있어야합니다. – jww

답변

0

서명 생성은 HMAC 메시지 인증과 동일하지 않으며 다른 키를 사용합니다. HMAC는 어떤 크기의 키도 사용할 수 있기 때문에 아마도 개인 키를 사용하게 될 것입니다. 그러나 이것이 작동하는 방식이 아닙니다. RSA는 개인 키와 공개 키를 사용하는 비대칭 알고리즘이며 MAC은 대칭 키를 사용합니다. dgst -sign은 대신 RSA PKCS # 1 v1.5 패딩을 사용하여 파일에 서명합니다. OpenSSL Wiki on dgst에서

:

파일을 서명, 자동으로 개인 키의 ASN.1 정보를 기반으로 서명에 사용하는 알고리즘 (RSA, ECC 등)를 결정합니다 dgst. 서명을 확인할 때 x.509, CMS 및 S/MIME과 같은 형식에서 사용되는 서명자와 알고리즘을 식별하는 관련 데이터가 아닌 RSA, DSA 또는 ECDSA 서명 자체 만 처리합니다.

HMAC는 SHA-256과 동일하지 않습니다. RSA 서명 생성은 HMAC가 아니라 해시를 사용합니다. 해시를 만들려면 SHA256 class을 사용해야합니다. HMAC는 메시지 인증 코드 을 사용하여 SHA-256 해시를 사용하여 빌드합니다. 그러나 SHA 클래스는 서명 생성에 일반적으로 필요하지 않습니다. 에는 해시 생성 (해시 값이 아닌 메시지에 서명 함)이입니다.

서명을 만들려면 RSAPKCS1SignatureFormatter 클래스를 살펴보십시오. 하단에 예제가 포함되어 있습니다. 이 예제를 사용하여 다시 시도하십시오.

메시지에 ASCII (문자열에있는 텍스트 파일에 둘 다 포함) 만 포함되어 있으면 결과가 제대로 표시되지 않을 수도 있습니다.

+0

올바른 경로에서 멀리 벗어난다면 세계의 가장자리에서 벗어 났을 것입니다. –

관련 문제