#region   跨平台加解密(c# 安卓 IOS)
      //  public static string sKey = "12345678";
      //  /// <summary>
      //  /// 解密
      //  /// </summary>
      //  /// <param name="pToDecrypt">要解密的以Base64</param>
      //  /// <param name="sKey">密钥,且必须为8位</param>
      //  /// <returns>已解密的字符串</returns>
      //  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;
      //      }
      //  }
 
      //  /// <summary>
      //  /// 对字符串进行DES加密
      //  /// </summary>
      //  /// <param name="sourceString">待加密的字符串</param>
      //  /// <returns>加密后的BASE64编码的字符串</returns>
      //  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 --------------------------------------------------------------------------------------------------------------------\
//加密
+(NSString *)decryptWithContent:(NSString *)content
{
    
    char * keyChar =(char*)[@"加密key" UTF8String];
       NSString *jm = [NSString stringWithCString:encryptWithKeyAndType([content UTF8String], kCCEncrypt, keyChar) encoding:NSUTF8StringEncoding];
    
    return [NSString stringWithFormat:@"%@%@%@",qstr,jm,hstr];
 
}
//解密
+(NSData *)encryptWithContent:(NSData *)content
{
    NSString *contentStr = [[NSString alloc] initWithData:content encoding:NSUTF8StringEncoding];
    
    if (contentStr == nil || [contentStr isEqualToString:@""]) {
        return nil;
    }
    
    contentStr= [contentStr substringWithRange:NSMakeRange(4,contentStr.length-8)];
    
    const char * contentChar =[contentStr UTF8String];
    char * keyChar =(char*)[@"加密key" UTF8String];
    const char *miChar;
    miChar = encryptWithKeyAndType(contentChar, kCCDecrypt, keyChar);
    if (miChar == nil) {
        miChar = "";
    }
    
    NSString *zmStr = [NSString stringWithCString:miChar encoding:NSUTF8StringEncoding];
    if (zmStr == nil) {
        zmStr =@"";
    }
    return [zmStr dataUsingEncoding:NSUTF8StringEncoding];
}
 
 
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 = 0; //size_t  是操作符sizeof返回的结果类型
    size_t dataOutMoved = 0;
    
    dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
    dataOut = malloc( dataOutAvailable * sizeof(uint8_t));
    memset((void *)dataOut, 00, 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];
    
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = 0; //size_t  是操作符sizeof返回的结果类型
    size_t dataOutMoved = 0;
    
    dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
    dataOut = malloc( dataOutAvailable * sizeof(uint8_t));
    memset((void *)dataOut, 00, 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];
}

DES跨(C# Android IOS)三个平台通用的加解密方法的更多相关文章

  1. C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密

    前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...

  2. Android数据库安全解决方案,使用SQLCipher进行加解密

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952409 我们都知道,Android系统内置了SQLite数据库,并且提供了一 ...

  3. Java Des加解密方法(c#加密Java解密)

    最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录.这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java ...

  4. C#三个平台上的文件选择方法

    wpf: Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); dlg.DefaultExt = &qu ...

  5. 几种加解密方法:AES、DES、SHA数据加密

    一般项目都会用上加密,刚好手上的项目就用到DES加密,就贴一些代码记录一下 DES加密步奏: 1.初始化两个字符串,一个为指定的秘钥,一个为初始化向量,要求是8个字符. 2.加密:秘钥.向量.需加密的 ...

  6. 【Android】安卓中常用的图片加载方法

    一.通过相机选图片: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  7. 三重Des对称加密在Android、Ios 和Java 平台的实现

    引言      如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在android.ios.java平台的使用方法: DES加密是目前最常用的对称加密方式, ...

  8. 3DES在Android、Ios 和Java 平台的加密解密

      DES简介:      DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法, 算法的入口参数有三个:Key.Data.Mode.      K ...

  9. C#/IOS/Android通用加密解密方法

    原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密 ...

随机推荐

  1. transient

    “transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号.或者这么给他换个名字——“不可序列化状态”.打个比方,如果一个用户有一些 ...

  2. 使用git建立远程仓库,让别人git clone下来

    首先, 如果你的ssh没有安装的话,要安装ssh服务端.ubuntu是很简单 sudo apt-get install openssh-server 1,建立你的git 目录. ourunix@ubu ...

  3. easyui datagrid 仿ext—右键

    var createGridHeaderContextMenu = function(e, field) { e.preventDefault(); var grid = $(this);/* gri ...

  4. hadoop2.0初识1.2

    1 hadoop启动方式(三种) 1.1 各个服务组件逐一启动 *dfs hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode ...

  5. 利用win7系统自带的dos命令把笔记本无线网卡当无线路由器(无线AP发射器)

    利用win7系统自带的dos命令把笔记本无线网卡当无线路由器(无线AP发射器). 1.打开win7开始菜单,找到命令提示符选项,以管理员身份运行cmd.2.在命令行上输入:netsh wlan set ...

  6. 安装DotNetCore.1.0.0-VS2015Tools.Preview2失败解决方案

    1.把安装文件放入非系统盘 2.命令行带参数运行: DotNetCore.1.0.0-VS2015Tools.Preview2.0.1.exe SKIP_VSU_CHECK=1 或 DotNetCor ...

  7. 响应式设计,bootstrap框架的IE兼容问题

    学习bootstrap框架,主要是为了集成好的响应式框架,及其兼容性. 但是按bootstrap中文站的说明文档 制作了一个栅格布局的test.html后,怎么测试都不成功,在ie8下一直看不到媒体查 ...

  8. [bzoj2124]等差子序列(hash+树状数组)

    我又来更博啦     2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 941  Solved: 348[Submit][Statu ...

  9. 学习mongo系列(三) update() save()

    一.update()方法 >db.user.update({"name":"user1"},{$set:{"title":" ...

  10. servlet学习笔记_1

    一.动态页面和静态页面 动态页面&静态页面:如果浏览器在不同时刻不同条件下访问web服务器的某个页面,浏览器所获得的页面内容会发生变化,那么这种页面称之为动态页面.动态页面和静态页面的区别在于 ...