0

클립 보드 텍스트로드의 디지털 서명을 만들려고합니다. 나는 :개인 키로 텍스트 블록에 서명 할 수 없습니다.

  1. 일반 텍스트의 SHA-256 해시 만들기.
  2. 내 PRIVATE 키로이 해시를 암호화 중입니다.
  3. 이 키를 내 PUBLIC 키와 함께 해독하려고합니다.

내 개인 키로 서명 된 모든 항목이 공개를 통해 해독 될 수 있음을 이해함에 따라이를 수행하고 있습니다. 잘못인가?

   public static string EncryptText(string text, int keySize, string publicKey) 
      { 
       var encrypted = Encrypt(Encoding.UTF8.GetBytes(text), keySize, publicKey); 
       return Convert.ToBase64String(encrypted); 
      } 

      public static byte[] Encrypt(byte[] data, int keySize, string publicKeyXml) 
      { 
       if (data == null || data.Length == 0) throw new ArgumentException("Data are empty", "data"); 
       int maxLength = GetMaxDataLength(keySize); 
       if (data.Length > maxLength) throw new ArgumentException(String.Format("Maximum data length is {0}", maxLength), "data"); 
       if (!IsKeySizeValid(keySize)) throw new ArgumentException("Key size is not valid", "keySize"); 
       if (String.IsNullOrEmpty(publicKeyXml)) throw new ArgumentException("Key is null or empty", "publicKeyXml"); 

       using (var provider = new RSACryptoServiceProvider(keySize)) 
       { 
        provider.FromXmlString(publicKeyXml); 
        return provider.Encrypt(data, OptimalAsymmetricEncryptionPadding); 
       } 
      } 

을하지만 내 PUBLIC KEY 대신 아래로 내 PRIVATE KEY을 통과 :

나는이 방법으로 해시를 암호화하고 있습니다.

그럼 내가 사용하고, 서명을 확인합니다 :

   public static string DecryptText(string privateKey, int keySize, string text) 
      { 
       var decrypted = Decrypt(Convert.FromBase64String(text), keySize, privateKey); 
       return Encoding.UTF8.GetString(decrypted); 
      } 

      public static byte[] Decrypt(byte[] data, int keySize, string publicAndPrivateKeyXml) 
      { 
       if (data == null || data.Length == 0) throw new ArgumentException("Data are empty", "data"); 
       if (!IsKeySizeValid(keySize)) throw new ArgumentException("Key size is not valid", "keySize"); 
       if (String.IsNullOrEmpty(publicAndPrivateKeyXml)) throw new ArgumentException("Key is null or empty", "publicAndPrivateKeyXml"); 

       using (var provider = new RSACryptoServiceProvider(keySize)) 
       { 
        provider.FromXmlString(publicAndPrivateKeyXml); 
        return provider.Decrypt(data, OptimalAsymmetricEncryptionPadding); 
       } 
      } 

하지만 PRIVATE KEY보다는 내 PUBLIC KEY을 전달합니다. 이 시점에서 "키가 존재하지 않습니다"라는 오류 메시지가 나타납니다.

PRIVATE KEYPUBLIC KEY에 대한 관련 키 정보가 포함되어 있으므로이 단방향으로 디코딩 할 수 있으므로이 경우라고 생각합니다.

PUBLIC KEY을 아는 사람이 암호를 해독 할 수있는 방법으로 서명을 배포 할 수있는 방법으로 텍스트 블록에 서명 할 수 있습니까?

답변