.net 安卓IOS跨平台des加解密双向的(可以互相加解密)

  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  

 

posted @ 2015-02-09 16:27  曹杰博  阅读(408)  评论(0编辑  收藏  举报