블로그 이미지
래머
오늘도 열심히 개발하는 개발자입니다.

calendar

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

Notice

2014. 5. 3. 23:43 안드로이드

첨부된 바운시캐슬 암호화 라이브러리를 참조에 추가하고 사용해야 한다.

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using System;
 
using System.Security.Cryptography;
 
using System.IO;
 
using System.Text;
 
using System.Xml;
 
using System.Collections.Generic;
 
using System.Linq;
 
using Org.BouncyCastle.Security;
 
using Org.BouncyCastle.Crypto;
 
using Org.BouncyCastle.Crypto.Parameters;
 
 
 
 
/*
사용법
GoogleSignatureVerify gsv = new GoogleSignatureVerify("발급받은 API키");
if (gsv.Verify("결제데이터", 사인데이터))
{
//성공시 처리
}
*/
 
public class GoogleSignatureVerify
 
    {
 
        RSAParameters _rsaKeyInfo;
 
 
 
 
        public GoogleSignatureVerify(String GooglePublicKey)
 
        {
 
            RsaKeyParameters rsaParameters = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(GooglePublicKey));
 
 
 
 
            byte[] rsaExp = rsaParameters.Exponent.ToByteArray();
 
            byte[] Modulus = rsaParameters.Modulus.ToByteArray();
 
 
 
 
            // Microsoft RSAParameters modulo wants leading zero's removed so create new array with leading zero's removed
 
            int Pos = 0;
 
            for (int i = 0; i < Modulus.Length; i++)
 
            {
 
                if (Modulus[i] == 0)
 
                {
 
                    Pos++;
 
                }
 
                else
 
                {
 
                    break;
 
                }
 
            }
 
            byte[] rsaMod = new byte[Modulus.Length - Pos];
 
            Array.Copy(Modulus, Pos, rsaMod, 0, Modulus.Length - Pos);
 
 
 
 
            // Fill the Microsoft parameters
 
            _rsaKeyInfo = new RSAParameters()
 
            {
 
                Exponent = rsaExp,
 
                Modulus = rsaMod
 
            };
 
        }
 
 
 
 
        public bool Verify(String Message, String Signature)
 
        {
 
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
 
            {
 
                rsa.ImportParameters(_rsaKeyInfo);
 
                return rsa.VerifyData(Encoding.ASCII.GetBytes(Message), "SHA1", Convert.FromBase64String(Signature));
 
            }
 
        }
 
    }
 
 
 
cs

BouncyCastle.Crypto.dll

유니티를 사용하신다면 아래 유니티 패키지를 임포트 하시면 바운시 캐슬 라이브러리소스가 임포트됩니다.


BouncyCastle.unitypackage



posted by 래머