.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]; }

相關文章
相關標籤/搜索