1 #region 跨平台加解密(c# 安卓 IOS)
2
3 // public static string sKey = "12345678";
4
5 // ///
6
7 // /// 解密
8
9 // ///
10
11 // /// 要解密的以Base64
12
13 // /// 密钥,且必须为8位
14
15 // /// 已解密的字符串
16
17 // public static string DesDecrypt(string pToDecrypt)
18
19 // {
20
21 // //转义特殊字符
22
23 // pToDecrypt = pToDecrypt.Replace("-", "+");
24
25 // pToDecrypt = pToDecrypt.Replace("_", "/");
26
27 // pToDecrypt = pToDecrypt.Replace("~", "=");
28
29 // byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
30
31 // using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
32
33 // {
34
35 // des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
36
37 // des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
38
39 // System.IO.MemoryStream ms = new System.IO.MemoryStream();
40
41 // using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
42
43 // {
44
45 // cs.Write(inputByteArray, 0, inputByteArray.Length);
46
47 // cs.FlushFinalBlock();
48
49 // cs.Close();
50
51 // }
52
53 // string str = Encoding.UTF8.GetString(ms.ToArray());
54
55 // ms.Close();
56
57 // return str;
58
59 // }
60
61 // }
62
63
64
65 // ///
66
67 // /// 对字符串进行DES加密
68
69 // ///
70
71 // /// 待加密的字符串
72
73 // /// 加密后的BASE64编码的字符串
74
75 // public string Encrypt(string sourceString)
76
77 //{
78
79 // byte[] btKey = Encoding.UTF8.GetBytes(sKey);
80
81 // byte[] btIV = Encoding.UTF8.GetBytes(sKey);
82
83 // DESCryptoServiceProvider des = new DESCryptoServiceProvider();
84
85 // using (MemoryStream ms = new MemoryStream())
86
87 // {
88
89 // byte[] inData = Encoding.UTF8.GetBytes(sourceString);
90
91 // try
92
93 // {
94
95 // using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
96
97 // {
98
99 // cs.Write(inData, 0, inData.Length);
100
101 // cs.FlushFinalBlock();
102
103 // }
104
105
106
107 // return Convert.ToBase64String(ms.ToArray());
108
109 // }
110
111 // catch
112
113 // {
114
115 // throw;
116
117 // }
118
119 // }
120
121 //}
122
123
124
125 #endregion
126
127
128
129
130
131
132
133
134
135 安卓---------------------------------------------------------------------------
136
137 // // 加密
138
139 //public static String DecryptDoNet(String message, String key)
140
141 // throws Exception {
142
143 // byte[] bytesrc = Base64.decode(message.getBytes(), Base64.DEFAULT);
144
145 // Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
146
147 // DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
148
149 // SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
150
151 // SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
152
153 // IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
154
155 // cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
156
157 // byte[] retByte = cipher.doFinal(bytesrc);
158
159 // return new String(retByte);
160
161 //}
162
163
164
165 //// 解密
166
167 //public static String EncryptAsDoNet(String message, String key)
168
169 // throws Exception {
170
171 // Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
172
173 // DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
174
175 // SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
176
177 // SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
178
179 // IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
180
181 // cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
182
183 // byte[] encryptbyte = cipher.doFinal(message.getBytes());
184
185 // return new String(Base64.encode(encryptbyte, Base64.DEFAULT));
186
187 //}
188
189
190
191
192
193
194
195 Ios --------------------------------------------------------------------------------------------------------------------\
196
197 static const char* encryptWithKeyAndType(const char *text,CCOperation encryptOperation,char *key)
198 {
199 NSString *textString=[[NSString alloc]initWithCString:text encoding:NSUTF8StringEncoding];
200 // NSLog(@"[[item.url description] UTF8String=%@",textString);
201 const void *dataIn;
202 size_t dataInLength;
203
204 if (encryptOperation == kCCDecrypt)//传递过来的是decrypt 解码
205 {
206 //解码 base64
207 NSData *decryptData = [GTMBase64 decodeData:[textString dataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8并decode
208 dataInLength = [decryptData length];
209 dataIn = [decryptData bytes];
210 }
211 else //encrypt
212 {
213 NSData* encryptData = [textString dataUsingEncoding:NSUTF8StringEncoding];
214 dataInLength = [encryptData length];
215 dataIn = (const void *)[encryptData bytes];
216 }
217
218
219 CCCryptorStatus ccStatus;
220 uint8_t *dataOut = NULL; //可以理解位type/typedef 的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)
221 size_t dataOutAvailable = 0; //size_t 是操作符sizeof返回的结果类型
222 size_t dataOutMoved = 0;
223
224 dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
225 dataOut = malloc( dataOutAvailable * sizeof(uint8_t));
226 memset((void *)dataOut, 00, dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0
227
228 //NSString *initIv = @"12345678";
229 const void *vkey = key;
230 const void *iv = (const void *) key; //[initIv UTF8String];
231
232 //CCCrypt函数 加密/解密
233 ccStatus = CCCrypt(encryptOperation,// 加密/解密
234 kCCAlgorithmDES,// 加密根据哪个标准(des,3des,aes。。。。)
235 kCCOptionPKCS7Padding,// 选项分组密码算法(des:对每块分组加一次密 3DES:对每块分组加三个不同的密)
236 vkey, //密钥 加密和解密的密钥必须一致
237 kCCKeySizeDES,// DES 密钥的大小(kCCKeySizeDES=8)
238 iv, // 可选的初始矢量
239 dataIn, // 数据的存储单元
240 dataInLength,// 数据的大小
241 (void *)dataOut,// 用于返回数据
242 dataOutAvailable,
243 &dataOutMoved);
244
245 NSString *result = nil;
246
247 if (encryptOperation == kCCDecrypt)//encryptOperation==1 解码
248 {
249 //得到解密出来的data数据,改变为utf-8的字符串
250 result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding];
251 }
252 else //encryptOperation==0 (加密过程中,把加好密的数据转成base64的)
253 {
254 //编码 base64
255 NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved];
256 result = [GTMBase64 stringByEncodingData:data];
257 }
258
259 return [result UTF8String];
260
261 }
262 +(NSString*)encryptWithContent:(NSString*)content type:(CCOperation)type key:(NSString*)aKey
263 {
264 const char * contentChar =[content UTF8String];
265 char * keyChar =(char*)[aKey UTF8String];
266 const char *miChar;
267 miChar = encryptWithKeyAndType(contentChar, type, keyChar);
268 return [NSString stringWithCString:miChar encoding:NSUTF8StringEncoding];
269 }
270
271