데이터베이스에 저장되고 고객 중 한 명에게 전송되는 데이터를 암호화하는 작업이 주어졌습니다. 나는 최선의 방법은 비대칭 암호화를 사용하여 고객의 공개 키 아무도 암호화하지 않고 고객 (개인 키의 소유자)이 암호 해독 할 수 있도록하는 것이라고 생각했습니다.C# - 제 3 자 공개 키를 사용하여 제 3 자에게 보낸 데이터 암호화
고객의 공개 키, 알고리즘 유형 (RSA 또는 DSA) 및 만료일을 인증서를 관리하는 대신 데이터베이스에 저장하고 싶습니다. 문제는 공개 키를 저장하고 사용할 수있는 방법입니다. 테스트 할 다음과 같은 작은 프로그램을 만들었고 문제가 발생했습니다.
class Program
{
static void Main(string[] args)
{
const string publicKeyString = "30 81 89 02 81 81 00 c2 6e 7e e8 78 66 3d 74 fd a7 57 21 24 2d c0 ee 53 59 54 14 db f5 cb 5e 8c 64 c8 73 d5 83 d7 12 57 3f e2 92 54 9a 87 94 18 71 04 c8 b5 92 44 27 78 e9 d3 de cb 5f f6 93 75 c0 46 6b 50 c7 45 a8 38 f9 a1 83 8e 26 51 5a 8c 22 95 8e 2b 4c 10 ea c6 85 ed 02 ed 66 81 ef a3 55 15 ad 64 33 d3 bd ca 75 db 35 44 49 54 ef 6a ca 2a d5 90 a7 9b be 03 40 62 16 fd be 39 fb b6 f0 6b f8 f1 00 c0 c5 02 03 01 00 01";
const string stringToEncrypt = "11111111111111111111";
var encoding = new UTF8Encoding();
var encryptedData = Encrypt(encoding.GetBytes(stringToEncrypt), encoding.GetBytes(publicKeyString));
Console.WriteLine("**** Encrypted String ****");
Console.WriteLine(encoding.GetString(encryptedData));
var decryptedData = Decrypt(encryptedData);
Console.WriteLine("**** Decrypted String ****");
Console.WriteLine(encoding.GetString(decryptedData));
Console.ReadKey();
}
static byte[] Encrypt(byte[] dataToEncrypt, byte[] publicKey)
{
var exponent = new byte[] { 1, 0, 1 };
var rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(new RSAParameters() { Modulus = publicKey, Exponent = exponent });
var encryptedData = rsa.Encrypt(dataToEncrypt, false);
return encryptedData;
}
static byte[] Decrypt(byte[] dataToDecrypt)
{
var cert = new X509Certificate2(@"C:\certs\BP_DEV_CERT_1024.p12", "password");
var rsa = (RSACryptoServiceProvider) cert.PrivateKey;
var decryptedData = rsa.Decrypt(dataToDecrypt, false);
return decryptedData;
}
}
내가 얻을이 프로그램을 실행하면 "암호를 해독 할 수있는 데이터는 128 바이트의 계수의 최대 값을 초과합니다." 이것은 제가 사용하는 공개 키가 완전히 잘못되었음을 준비하는 방법을 믿게합니다. .
그래서 나는 몇 가지 알아야 할 것 같아요 :
을 나는 인증서의 공개 키를 복사 할 수 있습니다하지만이 데이터베이스에 어떻게 보관해야합니까?
공개 키 문자열을 적절한 바이트 배열로 제대로 변환해야합니까?
누군가가 가지고있는 다른 포인터.
필자가 먼저해야 할 일은 바이트 배열 인 공개 키 (16 진 덤프)를 변환한다는 것입니다. – idflyfish
문제가 해결되면 답변으로 게시해야합니다. –
자신의 질문에 답하기 전에 잠시 기다려야 할 수도 있습니다.하지만 제발하십시오! – Marijn