클립 보드 텍스트로드의 디지털 서명을 만들려고합니다. 나는 :개인 키로 텍스트 블록에 서명 할 수 없습니다.
- 일반 텍스트의 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);
}
}
을하지만 내 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 KEY
에 PUBLIC KEY
에 대한 관련 키 정보가 포함되어 있으므로이 단방향으로 디코딩 할 수 있으므로이 경우라고 생각합니다.
내 PUBLIC KEY
을 아는 사람이 암호를 해독 할 수있는 방법으로 서명을 배포 할 수있는 방법으로 텍스트 블록에 서명 할 수 있습니까?