원본글 : http://son10001.blogspot.com/2014/12/c-rsa.html


RSA 암호화는 공개키와 개인키가 한쌍으로 공개키로 암호화한 내용은 개인키로만.

개인키로 암호화한 내용은 공개키로만 해독할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System.Security;
using System.Security.Cryptography;
using System.Text;
 
private string password = "goldapple";
private string encodedString = "";
 
private void Start()
{
    // 암호화 개체 생성
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
 
    // 개인키 생성(복호화용)
    RSAParameters privateKey = RSA.Create().ExportParameters(true);
    rsa.ImportParameters(privateKey);
    string privateKeyText = rsa.ToXmlString(true);
 
    // 공개키 생성(암호화용)
    RSAParameters publicKey = new RSAParameters();
    publicKey.Modulus = privateKey.Modulus;
    publicKey.Exponent = privateKey.Exponent;
    rsa.ImportParameters(publicKey);
    string publicKeyText = rsa.ToXmlString(false);
 
    encodedString = RSAEncrypt(password, publicKeyText);
    string decodedString = RSADecrypt(encodedString, privateKeyText);
 
    print(password);
    print(encodedString);
    print(decodedString);
}
 
// RSA 암호화
public string RSAEncrypt(string getValue, string pubKey)
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString(pubKey);
 
    //암호화할 문자열을 UFT8인코딩
    byte[] inbuf = (new UTF8Encoding()).GetBytes(getValue);
 
    //암호화
    byte[] encbuf = rsa.Encrypt(inbuf, false);
 
    //암호화된 문자열 Base64인코딩
    return System.Convert.ToBase64String(encbuf);
}
 
// RSA 복호화
public static string RSADecrypt(string getValue, string priKey)
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString(priKey);
 
    //sValue문자열을 바이트배열로 변환
    byte[] srcbuf = System.Convert.FromBase64String(getValue);
 
    //바이트배열 복호화
    byte[] decbuf = rsa.Decrypt(srcbuf, false);
 
    //복호화 바이트배열을 문자열로 변환
    string sDec = (new UTF8Encoding()).GetString(decbuf, 0, decbuf.Length);
    return sDec;
}
cs


우선 키를 하나 생성하고 비대칭인 키를 하나 더 생성한다. (개인키, 공개키)

그리고 System.Security.Cryptography에서 제공되는 함수들로 암호화, 복호화 하면 됨.




순서대로 원본 password, 암호화된값, 복호화한값을 출력한 것.

Posted by misty_
,