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

http://blog.sina.com.cn/s/blog_beda09820102v5fu.htmlhtml

.net 安卓IOS跨平台des加解密双向的(能够互相加解密)算法

 

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

      //  public static string sKey = "12345678";ide

      //  /// 函数

      //  /// 解密ui

      //  /// 编码

      //  /// 要解密的以Base64加密

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

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

      //  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 = 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]; }

相关文章
相关标签/搜索