공개/개인 키 기술을 사용하여 데이터를 암호화하려고합니다. 내 말은, 수신자의 공개 키로 암호화하면 수신자가 개인 키로 해독 할 수 있습니다.C#의 공용 및 개인 키 암호화 기술을 사용하는 방법
어떻게하면됩니까? 제안이나 샘플 코드 또는 다른 것이 있습니까?
공개/개인 키 기술을 사용하여 데이터를 암호화하려고합니다. 내 말은, 수신자의 공개 키로 암호화하면 수신자가 개인 키로 해독 할 수 있습니다.C#의 공용 및 개인 키 암호화 기술을 사용하는 방법
어떻게하면됩니까? 제안이나 샘플 코드 또는 다른 것이 있습니까?
코드 예제 :
이private static string _privateKey;
private static string _publicKey;
private static UnicodeEncoding _encoder = new UnicodeEncoding();
private static void RSA()
{
var rsa = new RSACryptoServiceProvider();
_privateKey = rsa.ToXmlString(true);
_publicKey = rsa.ToXmlString(false);
var text = "Test1";
Console.WriteLine("RSA // Text to encrypt: " + text);
var enc = Encrypt(text);
Console.WriteLine("RSA // Encrypted Text: " + enc);
var dec = Decrypt(enc);
Console.WriteLine("RSA // Decrypted Text: " + dec);
}
public static string Decrypt(string data)
{
var rsa = new RSACryptoServiceProvider();
var dataArray = data.Split(new char[] { ',' });
byte[] dataByte = new byte[dataArray.Length];
for (int i = 0; i < dataArray.Length; i++)
{
dataByte[i] = Convert.ToByte(dataArray[i]);
}
rsa.FromXmlString(_privateKey);
var decryptedByte = rsa.Decrypt(dataByte, false);
return _encoder.GetString(decryptedByte);
}
public static string Encrypt(string data)
{
var rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(_publicKey);
var dataToEncrypt = _encoder.GetBytes(data);
var encryptedByteArray = rsa.Encrypt(dataToEncrypt, false).ToArray();
var length = encryptedByteArray.Count();
var item = 0;
var sb = new StringBuilder();
foreach (var x in encryptedByteArray)
{
item++;
sb.Append(x);
if (item < length)
sb.Append(",");
}
return sb.ToString();
}
가 RSACryptoServiceProvider가 없습니다 데이터의 암호화 된 랜덤 얼룩 (데이터 크기는 키 사이즈로 제한됩니다). 또한 일반적으로 OAEP 패딩을 사용해야하며 PCKS1v1.5를 명시 적으로 전환하지 않아야 선택한 암호화 텍스트 공격으로부터 보호 할 수 있습니다. 아무도이 샘플 코드를 사용해야하지 않습니다. – jbtule
@ jbtule : 개인 및 공개 키 개념을 사용하여 대용량 데이터의 암호를 해독하는 것이 가장 좋습니다. – Mou
@Mou 내가 수집 한 것부터 대칭 키를 생성 한 다음이를 수신기의 공개 키로 암호화하여 전송합니다. 수신기는 개인 키로 암호를 해독 한 다음 공유 대칭 키를 사용하여 대용량 데이터를 암호화합니다. n 개의 전송마다 대칭 키를 업데이트 할 수 있습니다. 나는 이것이 SSL이 작동하는 방법이라고 생각한다. (매우 단순화 된 설명이라고 확신한다.) – MikeJansen
가 [? 당신이 시도 무엇] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) – ntoskrnl