C# RSA 加密

產生公鑰和私鑰:
    
using System.Security.Cryptography;

using var rsa = RSA.Create(2048); // 金鑰長度
var publicKey = Convert.ToBase64String(rsa.ExportSubjectPublicKeyInfo());
var privateKey = Convert.ToBase64String(rsa.ExportPkcs8PrivateKey());

Console.WriteLine($"publicKey: {publicKey}");
Console.WriteLine($"privateKey: {privateKey}");
    

範例輸出:
    
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyJ2qUClPSJqEGDlrZpc3QEZUcyiKoknoREKGFqb/fKbYy6aYFCrUmaAuXcs42hGFG2DfOiMBeUu4xCF9BWnwntrIO7V8kTvpsbG2O+/b/AuJSNLt/Px5nw8eL4gbJRtyRtNe2sb1xzpH1gSBixP6quCbZLLJz1amd3CCeOfvqDtGeNnMSF6Xu+5+yHTcqmWfEj71exUj3+DRsQuZIpCSNFe/weBENBh0mayEJCfQ5vSRfJ5lJ18eWQI0U2WHCNAhh4VvqKY04QtHoKe6Nzx5C/sGcE7DwVMyMeBbiYGwKqF/PgJwG/s0rduBw+s5x5t5fmxgQMSI4yJjqfxBmGeYZQIDAQAB

privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDInapQKU9ImoQYOWtmlzdARlRzKIqiSehEQoYWpv98ptjLppgUKtSZoC5dyzjaEYUbYN86IwF5S7jEIX0FafCe2sg7tXyRO+mxsbY779v8C4lI0u38/HmfDx4viBslG3JG017axvXHOkfWBIGLE/qq4JtkssnPVqZ3cIJ45++oO0Z42cxIXpe77n7IdNyqZZ8SPvV7FSPf4NGxC5kikJI0V7/B4EQ0GHSZrIQkJ9Dm9JF8nmUnXx5ZAjRTZYcI0CGHhW+opjThC0egp7o3PHkL+wZwTsPBUzIx4FuJgbAqoX8+AnAb+zSt24HD6znHm3l+bGBAxIjjImOp/EGYZ5hlAgMBAAECggEBAItkye9TFMzM2FYAp7ir/28ArzMpC1MCaYnsc0EQHludjuvKQMdaj0iDfVQcnc8f903zvIenxSFj1Okqn7UATHoEaLbcPsanS5T1dzskScVSurxIG6b6QwObPI0oVDwvWvMNcU4wipw4yatSjDR32GedEzwf4ovXmGlLWszp06Me+b8FO3Z2wjZ094ZkKh1phLLjzA//x/Oo4gX2bORWrHIY0dKLt0Cm21PdK9u26ka382y/PxOFpVwBGSJKZ/UwRkpJfZmhIkK8Dxo8WWRLMf49GYH/EUPdmOGQAnZP6cWl1cleifTgLM60JDv1GzqkFYfEECNS4kqGpQNvAm8WXO0CgYEA5V453qUbAS9iWBQsW6V+pjrignhskPWrXh/h3m4oKGElBqW7QQDBx1HJVD2VUfre4iyJ/ZOXRhQqEysY52SStI8061pp5MjgZXTQ9fRM722awsHxv7+qLTJibBrMxfm9Km4dB2X8u35zax+g320zrMyh988QacReoOVmcLS/5tcCgYEA3+jN7zPLLqD4cD2y3CmE40jz1VqM9boQilvTkgVkchLOrY4Z4elquW5cOd/YHzI7dmeuj59nCExGEZaliWA54ChU4UXN7HzxMBZ3ydQ9Nl/LKhQxhK8tjJ+C8yWK3m7BpeCYv5C/tS6GNd1cbn3qqEWM/vc6Fe0dAP7FT0ihHyMCgYEAwQo1oDnK6YtstH59+r/lQJgsjOw3SyVIDha9LUv+xkVEOT0AxSuS62LdE+YkpvOB5E7h8CXoWhWcd7d85TpS8l3Yhv/4QZICscDIIUhz+8p+Rs2d3ei8m/9csGk50KFoYK5+Bf0C4PYCw7TB22j35cXvxzVhNfMMRVPsjIzDOc8CgYEAuKSmjgdMGlusBAMdJ+klKLjUOrC9ZTXWxgILanL/7gIMZZq1RVLTK68SZrds5ezqlC3UCaQNtw4PChoM0EiF8Y/QzyRdOBOgYWNlzQ40nE5Kn5yfaSd8jGZN+myPI/Z5wmyAChk3vhVrn6e3vXYguDsClo8RW1t5e4Sc+VCPbbkCgYBGmGt3qee9LCZfQaBfLnhvM6FqYGewU2dDKlaptiHZqLzlwgV/wozXRLIcRrNfAIFkLWOkGtzgEBYl6XpywKUrZFVQu8XCmsNSDUe9Z1X9sNZowRIdco9ACPsYHtxk69wVLI18CgLMfLe4QgbECMlaXemiD6g1MUbT9ovzrn38xQ==
    

使用公鑰加密:
    
using System.Security.Cryptography;
using System.Text;

// 公鑰
var publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyJ2qUClPSJqEGDlrZpc3QEZUcyiKoknoREKGFqb/fKbYy6aYFCrUmaAuXcs42hGFG2DfOiMBeUu4xCF9BWnwntrIO7V8kTvpsbG2O+/b/AuJSNLt/Px5nw8eL4gbJRtyRtNe2sb1xzpH1gSBixP6quCbZLLJz1amd3CCeOfvqDtGeNnMSF6Xu+5+yHTcqmWfEj71exUj3+DRsQuZIpCSNFe/weBENBh0mayEJCfQ5vSRfJ5lJ18eWQI0U2WHCNAhh4VvqKY04QtHoKe6Nzx5C/sGcE7DwVMyMeBbiYGwKqF/PgJwG/s0rduBw+s5x5t5fmxgQMSI4yJjqfxBmGeYZQIDAQAB";

// 要加密的內容
var text = "https://www.ruyut.com";

var publicKeyBytes = Convert.FromBase64String(publicKey);
using var rsa = RSA.Create();
rsa.ImportSubjectPublicKeyInfo(publicKeyBytes, out _);

var data = Encoding.UTF8.GetBytes(text);
var encrypted = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256);

var result = Convert.ToBase64String(encrypted);
Console.WriteLine($"Encrypted: {result}"); // Encrypted: aOfLismZqJGfg6nVbjTzU8bnlHUWzcZEtswkUqYZFgDwauDogFOjYYkf6Ss84jTYkoL+iZzlBdtTaM+Yfce57aKj6OpA57j8rHdbe7pYF6mj1mzptutZAYYPABanJo25GKEEaYbehQmBKjkUUmYPmvdw9TzJ6zGk8UGA2GqSRarWFtpqpLSomaoxn8mMsGlaYynnVxELXtug7Fik5LImjfJ7ezfOTSqxaSJhOkZq4WyiLaUb2v+RJwqcx5axap/FcIe1zcXFMwHlsYbEB6tgqkSfAfc+P/dgmMBCztQ0+nhVa4ChkWjiOg61+5IoXKXjLJ2aUks6AtnBbs2IXaT4Zw==
    

使用私鑰解密:
    
using System.Security.Cryptography;
using System.Text;

// 私鑰
var privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDInapQKU9ImoQYOWtmlzdARlRzKIqiSehEQoYWpv98ptjLppgUKtSZoC5dyzjaEYUbYN86IwF5S7jEIX0FafCe2sg7tXyRO+mxsbY779v8C4lI0u38/HmfDx4viBslG3JG017axvXHOkfWBIGLE/qq4JtkssnPVqZ3cIJ45++oO0Z42cxIXpe77n7IdNyqZZ8SPvV7FSPf4NGxC5kikJI0V7/B4EQ0GHSZrIQkJ9Dm9JF8nmUnXx5ZAjRTZYcI0CGHhW+opjThC0egp7o3PHkL+wZwTsPBUzIx4FuJgbAqoX8+AnAb+zSt24HD6znHm3l+bGBAxIjjImOp/EGYZ5hlAgMBAAECggEBAItkye9TFMzM2FYAp7ir/28ArzMpC1MCaYnsc0EQHludjuvKQMdaj0iDfVQcnc8f903zvIenxSFj1Okqn7UATHoEaLbcPsanS5T1dzskScVSurxIG6b6QwObPI0oVDwvWvMNcU4wipw4yatSjDR32GedEzwf4ovXmGlLWszp06Me+b8FO3Z2wjZ094ZkKh1phLLjzA//x/Oo4gX2bORWrHIY0dKLt0Cm21PdK9u26ka382y/PxOFpVwBGSJKZ/UwRkpJfZmhIkK8Dxo8WWRLMf49GYH/EUPdmOGQAnZP6cWl1cleifTgLM60JDv1GzqkFYfEECNS4kqGpQNvAm8WXO0CgYEA5V453qUbAS9iWBQsW6V+pjrignhskPWrXh/h3m4oKGElBqW7QQDBx1HJVD2VUfre4iyJ/ZOXRhQqEysY52SStI8061pp5MjgZXTQ9fRM722awsHxv7+qLTJibBrMxfm9Km4dB2X8u35zax+g320zrMyh988QacReoOVmcLS/5tcCgYEA3+jN7zPLLqD4cD2y3CmE40jz1VqM9boQilvTkgVkchLOrY4Z4elquW5cOd/YHzI7dmeuj59nCExGEZaliWA54ChU4UXN7HzxMBZ3ydQ9Nl/LKhQxhK8tjJ+C8yWK3m7BpeCYv5C/tS6GNd1cbn3qqEWM/vc6Fe0dAP7FT0ihHyMCgYEAwQo1oDnK6YtstH59+r/lQJgsjOw3SyVIDha9LUv+xkVEOT0AxSuS62LdE+YkpvOB5E7h8CXoWhWcd7d85TpS8l3Yhv/4QZICscDIIUhz+8p+Rs2d3ei8m/9csGk50KFoYK5+Bf0C4PYCw7TB22j35cXvxzVhNfMMRVPsjIzDOc8CgYEAuKSmjgdMGlusBAMdJ+klKLjUOrC9ZTXWxgILanL/7gIMZZq1RVLTK68SZrds5ezqlC3UCaQNtw4PChoM0EiF8Y/QzyRdOBOgYWNlzQ40nE5Kn5yfaSd8jGZN+myPI/Z5wmyAChk3vhVrn6e3vXYguDsClo8RW1t5e4Sc+VCPbbkCgYBGmGt3qee9LCZfQaBfLnhvM6FqYGewU2dDKlaptiHZqLzlwgV/wozXRLIcRrNfAIFkLWOkGtzgEBYl6XpywKUrZFVQu8XCmsNSDUe9Z1X9sNZowRIdco9ACPsYHtxk69wVLI18CgLMfLe4QgbECMlaXemiD6g1MUbT9ovzrn38xQ==";

// 加密後的內容
var encryptedText = "aOfLismZqJGfg6nVbjTzU8bnlHUWzcZEtswkUqYZFgDwauDogFOjYYkf6Ss84jTYkoL+iZzlBdtTaM+Yfce57aKj6OpA57j8rHdbe7pYF6mj1mzptutZAYYPABanJo25GKEEaYbehQmBKjkUUmYPmvdw9TzJ6zGk8UGA2GqSRarWFtpqpLSomaoxn8mMsGlaYynnVxELXtug7Fik5LImjfJ7ezfOTSqxaSJhOkZq4WyiLaUb2v+RJwqcx5axap/FcIe1zcXFMwHlsYbEB6tgqkSfAfc+P/dgmMBCztQ0+nhVa4ChkWjiOg61+5IoXKXjLJ2aUks6AtnBbs2IXaT4Zw==";

var privateKeyBytes = Convert.FromBase64String(privateKey);
using var rsa = RSA.Create();
rsa.ImportPkcs8PrivateKey(privateKeyBytes, out _);

var cipherBytes = Convert.FromBase64String(encryptedText);
var decrypted = rsa.Decrypt(cipherBytes, RSAEncryptionPadding.OaepSHA256);

var decryptedText = Encoding.UTF8.GetString(decrypted);
Console.WriteLine($"Decrypted: {decryptedText}"); // Decrypted: https://www.ruyut.com
    



文章撰寫中...請稍後...

留言