.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  
时间: 2024-11-06 03:55:35

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

安卓ios和angularjs相互调用解决首次调用ios传递标题失败的问题

1.angular 调用客户端方法放在 try catch中 try { js_invoke.showShareDialog(angular.toJson(obj));  // 在这里放客户端的方法即可 } catch(e) { console.log('Recommend share',obj); } 2.客户端调用angular的方法,注意方法需全局可以才能正常调用 在首页index.html中声明方法 var goBack = function() { return false }; 在具

PHP和.NET通用的加密解密函数类,均使用3DES加解密 .

以下为php代码 <PRE class=PHP name="code"> </PRE><PRE class=PHP name="code">PHP加解密函数:</PRE><PRE class=PHP name="code"> </PRE><PRE class=PHP name="code"> function encrypt($string)

Thinkphp5新版聚合VIP影视APP源码 安卓/IOS苹果双端,非常棒的一款在线视频VIP解析

Thinkphp5新版聚合VIP影视APP源码 安卓/IOS苹果双端,非常棒的一款在线视频VIP解析APP,代理裂变版下载地址:Q1013175107这套系统,我是开发者,外面都是乐色,后门无数.不信可以找我测试,秒进后台.删库跑路最新更新日志用户注册可以去除短信注册或保留新用户点击观影区直接跳登录页(不会弹出会员已过期)增加了观看记录增加成10条解析,最新电影页可以在后台添加,美化直播大厅,美化会员中心,独家可以切换会员中心风格 本套源码特色一.此版本为原生双端APP:(安卓+苹果)二.后台支

点击复制文字到剪贴板兼容性安卓ios

一般那种活动H5分享可能会用到点击复制文字到剪贴板,很简单的功能 于是搜了一搜:js复制文字到剪贴板,可用结果大致分为两类: 一类是js原生方法,这种方法兼容性不好,不兼容ios: https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand 另外,还有一些坑要注意 input/textarea为disabled不可用(readonly可以) input/textarea为hidden不可用 try{ var copy

【IOS学习基础】weak和strong、懒加载、循环引用

一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成引用计数加1:而strong则相当于OC中规定retain,它会造成引用计数加1”. ARC的原理:只要还有一个变量指向对象,对象就会保持在内存中.当指针指向新值,或者指针不再存在时,相关联的对象就会自动释放.这条规则对于实例变量.synthesize属性.局部变量都是适用的 strong指针能够保

iOS学习之路--下拉刷新和上拉加载更多

iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要的信息和获取最新的信息.那么这种功能如何实现呢,还请跟着笔者继续往下看. 目前来说,主要的实

加解密算法二:非对称加解密

加密和解密使用不同的密钥的一类加密算法.这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进行解密操作(即使密钥A也无法解密):相反,使用密钥B加密数据得到的密文,只有密钥A可以解密.这两个密钥分别称为私钥和公钥.私钥就是你个人保留,不能公开的密钥,而公钥则是公开给加解密操作的另一方的.根据不同用途,对数据进行加密所使用的密钥也不相同(有时用公钥加密,私钥解密:有时相反用私钥加密,公钥解密).非对称加密的代表算法是RSA算法.   RSA算法是第一个既能用于数据加密也

IOS学习之UiTableView下拉刷新与自动加载更多,百年不变的效果

IOS学习之UiTableView下拉刷新与自动加载更多,百年不变的效果(五) 五一劳动节马上来临,小伙伴有妹有很激动哟,首先祝天下所有的程序猿节日快乐!这个五一对于我来说有点不一样,我的人生从这个五一就转弯了,爱情长跑8年的我结婚了,一会支付宝账号我会公布出去,请自觉打款!谢谢合作. 灯光闪起来: 舞蹈跳起来: 歌曲唱起来: -------------------------------------------------------------------------------------

Android jni aes加解密,实现文件的加解密,具体实现可以自行修改,上面的代码为简单介绍,下面的是JNI端实现文件加解密,可以修改为字符串加解密

#include "aes.h" #include "modes.h" #include "e_os2.h" #include "aes_locl.h" #include "opensslconf.h" AES_KEY aes; //aes cbc模式加解密用到的向量 unsigned char iv[AES_BLOCK_SIZE]; for (i = 0; i < AES_BLOCK_SIZE; i