大量のクリップボード テキストのデジタル署名を作成しようとしています。私は:
- プレーン テキストの SHA-256 ハッシュを作成します。
- このハッシュを私のプライベート キーで暗号化します。
- これを公開鍵で解読しようとしています。
これは、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
ですか?