원본글 : 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, 암호화된값, 복호화한값을 출력한 것.
'프로그래밍 공부 > WPF' 카테고리의 다른 글
GoogleCloudVision API 사용하기 (이미지분석 텍스트 추출) (0) | 2018.11.26 |
---|---|
C# DES 암호화 (대칭키) (0) | 2018.10.13 |
웹소켓 사용하기 - 2. 클라이언트 설정 (0) | 2018.06.05 |
웹소켓 사용하기 - 1.서버 설정 (0) | 2018.06.05 |
UI 스레드 - 다른 스레드에서 UI의 값을 바꿀때 (0) | 2018.06.05 |