#region   跨平台加解密(c# 安卓 IOS)

       //  public static string sKey = "12345678";

       //  /// 

       //  /// 解密

       //  /// 

       //  /// 要解密的以Base64

       //  /// 密钥,且必须为8位

       //  /// 已解密的字符串

       //  public static string DesDecrypt(string pToDecrypt)

       //  {

       //      //转义特殊字符

       //      pToDecrypt = pToDecrypt.Replace("-", "+");

       //      pToDecrypt = pToDecrypt.Replace("_", "/");

       //      pToDecrypt = pToDecrypt.Replace("~", "=");

       //      byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);

       //      using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())

       //      {

       //          des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

       //          des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

       //          System.IO.MemoryStream ms = new System.IO.MemoryStream();

       //          using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))

       //          {

       //              cs.Write(inputByteArray, 0, inputByteArray.Length);

       //              cs.FlushFinalBlock();

       //              cs.Close();

       //          }

       //          string str = Encoding.UTF8.GetString(ms.ToArray());

       //          ms.Close();

       //          return str;

       //      }

       //  }

       //  /// 

       //  /// 对字符串进行DES加密

       //  /// 

       //  /// 待加密的字符串

       //  /// 加密后的BASE64编码的字符串

       //  public string Encrypt(string sourceString)

       //{

       //   byte[] btKey = Encoding.UTF8.GetBytes(sKey);

       //   byte[] btIV = Encoding.UTF8.GetBytes(sKey);

       //    DESCryptoServiceProvider des = new DESCryptoServiceProvider();

       //    using (MemoryStream ms = new MemoryStream())

       //    {

       //        byte[] inData = Encoding.UTF8.GetBytes(sourceString);

       //        try

       //        {

       //            using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))

       //            {

       //                cs.Write(inData, 0, inData.Length);

       //                cs.FlushFinalBlock();

       //            }

       //            return Convert.ToBase64String(ms.ToArray());

       //        }

       //        catch

       //        {

       //            throw;

       //        }

       //    }

       //}

         #endregion  

 安卓---------------------------------------------------------------------------

     //    // 加密

     //public static String DecryptDoNet(String message, String key)

     //        throws Exception {

     //    byte[] bytesrc = Base64.decode(message.getBytes(), Base64.DEFAULT);

     //    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

     //    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));

     //    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

     //    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

     //    IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));

     //    cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);

     //    byte[] retByte = cipher.doFinal(bytesrc);

     //    return new String(retByte);

     //}

     //// 解密

     //public static String EncryptAsDoNet(String message, String key)

     //        throws Exception {

     //    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

     //    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));

     //    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

     //    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

     //    IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));

     //    cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);

     //    byte[] encryptbyte = cipher.doFinal(message.getBytes());

     //    return new String(Base64.encode(encryptbyte, Base64.DEFAULT));

     //}

 Ios --------------------------------------------------------------------------------------------------------------------\

 static const char* encryptWithKeyAndType(const char *text,CCOperation encryptOperation,char *key)
{
NSString *textString=[[NSString alloc]initWithCString:text encoding:NSUTF8StringEncoding];
// NSLog(@"[[item.url description] UTF8String=%@",textString);
const void *dataIn;
size_t dataInLength; if (encryptOperation == kCCDecrypt)//传递过来的是decrypt 解码
{
//解码 base64
NSData *decryptData = [GTMBase64 decodeData:[textString dataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8并decode
dataInLength = [decryptData length];
dataIn = [decryptData bytes];
}
else //encrypt
{
NSData* encryptData = [textString dataUsingEncoding:NSUTF8StringEncoding];
dataInLength = [encryptData length];
dataIn = (const void *)[encryptData bytes];
} CCCryptorStatus ccStatus;
uint8_t *dataOut = NULL; //可以理解位type/typedef 的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)
size_t dataOutAvailable = ; //size_t 是操作符sizeof返回的结果类型
size_t dataOutMoved = ; dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - );
dataOut = malloc( dataOutAvailable * sizeof(uint8_t));
memset((void *)dataOut, , dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0 //NSString *initIv = @"12345678";
const void *vkey = key;
const void *iv = (const void *) key; //[initIv UTF8String]; //CCCrypt函数 加密/解密
ccStatus = CCCrypt(encryptOperation,// 加密/解密
kCCAlgorithmDES,// 加密根据哪个标准(des,3des,aes。。。。)
kCCOptionPKCS7Padding,// 选项分组密码算法(des:对每块分组加一次密 3DES:对每块分组加三个不同的密)
vkey, //密钥 加密和解密的密钥必须一致
kCCKeySizeDES,// DES 密钥的大小(kCCKeySizeDES=8)
iv, // 可选的初始矢量
dataIn, // 数据的存储单元
dataInLength,// 数据的大小
(void *)dataOut,// 用于返回数据
dataOutAvailable,
&dataOutMoved); NSString *result = nil; if (encryptOperation == kCCDecrypt)//encryptOperation==1 解码
{
//得到解密出来的data数据,改变为utf-8的字符串
result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding];
}
else //encryptOperation==0 (加密过程中,把加好密的数据转成base64的)
{
//编码 base64
NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved];
result = [GTMBase64 stringByEncodingData:data];
} return [result UTF8String]; }
+(NSString*)encryptWithContent:(NSString*)content type:(CCOperation)type key:(NSString*)aKey
{
const char * contentChar =[content UTF8String];
char * keyChar =(char*)[aKey UTF8String];
const char *miChar;
miChar = encryptWithKeyAndType(contentChar, type, keyChar);
return [NSString stringWithCString:miChar encoding:NSUTF8StringEncoding];
}

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

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

    1.angular 调用客户端方法放在 try catch中 try { js_invoke.showShareDialog(angular.toJson(obj));  // 在这里放客户端的方法即 ...

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

    一般那种活动H5分享可能会用到点击复制文字到剪贴板,很简单的功能 于是搜了一搜:js复制文字到剪贴板,可用结果大致分为两类: 一类是js原生方法,这种方法兼容性不好,不兼容ios: https://d ...

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

    一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成 ...

  4. 安卓ios各版本及分辨率占比

    Google Play 安装统计数据 只有安卓的 https://developer.android.com/about/dashboards/index.html?hl=zh-cn 腾讯移动分析 安 ...

  5. DES加密 java与.net可以相互加密解密两种方法

    DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...

  6. 史上最简单JS复制功能,兼容安卓ios!

    1.JS复制原理: 被复制内容的元素不能被其他元素遮盖,否则无效.  (设置opacity透明为0,不可以设置display:none); 2.常规的复制方法 function copyUrl2() ...

  7. iOS圆形图片裁剪,以及原型图片外面加一个圆环

    废话不多说,直接上代码 #import "ViewController.h" @interface ViewController () @property (nonatomic,s ...

  8. iOS边练边学--plist文件,懒加载,模型初使用--补充instancetype

    一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行 ...

  9. Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)

    假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=H ...

随机推荐

  1. 招商银行支付dll在64位windows系统下的注册使用问题

    按照文档中的说明,注册完dll后,依然报找不到COM组件的错误.尝试过以下方法: 1.在VS中将项目编译目标改为x86,只能解决VS可以启动程序的问题,一部署到IIS中就出错. 2.估计是因为权限问题 ...

  2. 【Java基础】Java中的多态

    什么是多态 多态是一个对象的多种实现,是建立在继承的基础上的,即对象“人”,有老师和学生不同的实现,其实总结起来就是允许将子类类型的指针赋值给父类类型的指针. 多态的发生条件 多态发生的前提是:1. ...

  3. HW3.10

    public class Solution { public static void main(String[] args) { int number1 = (int)(Math.random() * ...

  4. Hadoop InputFormat浅析

    本文转载:http://hi.baidu.com/_kouu/item/dc8d727b530f40346dc37cd1 在执行一个Job的时候,Hadoop会将输入数据划分成N个Split,然后启动 ...

  5. Native code - how to get function call stack (backtrace) programatically 附带源代码

    自己根据 https://github.com/zhuowei/libcorkscrew-ndk 上的库做了一个包装库并附带使用的例子(executable 分支),具体代码在自己的代码仓库里,名字叫 ...

  6. NULL指针 Void* 和野指针

    在C和C++的语言中常常有这几个概念: NULL指针.空指针.Void *指针.野指针(Wild Pointer)甚至垂悬指针(Dangling Pointer). 1.NULL指针,一般用于指向一个 ...

  7. pptp vpn

    webalizer是一个高效的.免费的web服务器日志分析程序.其分析结果以HTML文件格式保存,从而可以很方便的通过web服务器进行浏览; http://daliang1215.iteye.com/ ...

  8. MSSQL数字时间(timestamp)转换为DATETIME

    很简单: , CAST('1970-01-01 00:00:00' AS datetime))

  9. Learning JavaScript Design Patterns The Singleton Pattern

    The Singleton Pattern The Singleton pattern is thus known because it restricts instantiation of a cl ...

  10. 微信开发第8章 通过accesstoken将长连接转换为短链接

    业务场景:开发的过程中经常会有一些很长的链接,这个时候如果生成二维码,会导致扫码的过程中识别比较慢,如果存入数据库,会导致数据库的字段长度要设定的很长才行,所以把长连接转换为短链接就越来越重要了. 接 ...