DES跨(C# Android IOS)三個平台通用的加解密方法

來源:互聯網
上載者:User

標籤:

      #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 [email protected]"";    }    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)三個平台通用的加解密方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.