0

大量のクリップボード テキストのデジタル署名を作成しようとしています。私は:

  1. プレーン テキストの SHA-256 ハッシュを作成します。
  2. このハッシュを私のプライベート キーで暗号化します。
  3. これを公開鍵で解読しようとしています。

これは、PRIVATE キーで署名されたものはすべて 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);
                }
            }

PRIVATE KEYしかし、 myの代わりにmy down を渡しPUBLIC 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);
                }
            }

PUBLIC KEYではなく、私のものを渡しPRIVATE KEYます。この時点で、「キーが存在しません」というエラーが表示されます。

PRIVATE KEYに関連するキー情報が含まれているため、これはPUBLIC KEY一方向にデコードできるため、これが当てはまると思います。

この方法でテキストのブロックに署名して、署名を配布できるようにするにはどうすればよいPUBLIC KEYですか?

4

1 に答える 1

0

多くのトロールの後、私はこのページを見つけました: http://juzzbott.com.au/blog/signing-and-verifying-data-within-csharp

于 2013-06-04T20:35:52.697 に答える