zoukankan      html  css  js  c++  java
  • java C# objective-c AES对称加解密

     1 /** 
     2  * AES加解密 
     3  */  
     4 public class AESHelper {  
     5     final static String AES_KEY = "43hr8fhu34b58123";  
     6   
     7     /** 
     8      * AES加密 
     9      *  
    10      * @param text
    11      * 待加密字符串 
    12      * @return 加密后字符串 
    13      */  
    14     public static String AESEncrypt(String text) {  
    15         try {  
    16             String password = AES_KEY;  
    17             SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes(), "AES");  
    18             Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");  
    19             cipher.init(Cipher.ENCRYPT_MODE, skeySpec);  
    20             String strTmp = Base64.encodeToString(cipher.doFinal(text.getBytes()), Base64.DEFAULT);  
    21             return strTmp;  
    22         } catch (Exception e) {  
    23             e.printStackTrace();  
    24         }  
    25         return text;  
    26     }  
    27   
    28     /** 
    29      * AES解密 
    30      *  
    31      * @param text
    32      * 待解密字符串 
    33      * @return 解密后字符串 
    34      */  
    35     public static String aesDecrypt(String text) {  
    36         try {  
    37             String password = AES_KEY;  
    38             SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes(), "AES");  
    39             Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");  
    40             cipher.init(Cipher.DECRYPT_MODE, skeySpec);  
    41             String strTmp = new String(cipher.doFinal(Base64.decode(text, Base64.DEFAULT)));  
    42             return strTmp;  
    43         } catch (Exception ex) {  
    44             ex.printStackTrace();  
    45         }  
    46         return text;  
    47     }  
    48 } 
    Java
     1 public class AESHelper 
     2     {  
     3         const string AES_KEY = "43hr8fhu34b58123";  
     4   
     5         /// <summary>  
     6         /// AES加密  
     7         /// </summary>  
     8         /// <param name="Text">待加密字符串</param>  
     9         /// <returns>加密后字符串</returns>  
    10         public static string AESEncrypt(string Text)  
    11         {  
    12             try  
    13             {  
    14                 string key = AES_KEY;  
    15                 //分组加密算法  
    16                 AesCryptoServiceProvider aes =new AesCryptoServiceProvider();  
    17                 byte[] inputByteArray = Encoding.UTF8.GetBytes(Text);//得到需要加密的字节数组   
    18                 //设置密钥及密钥向量  
    19                 aes.Key = Encoding.UTF8.GetBytes(key);  
    20                 //aes.IV = Encoding.UTF8.GetBytes(key);  
    21                 aes.Mode = CipherMode.ECB;  
    22                 aes.Padding = PaddingMode.PKCS7;  
    23                 byte[] cipherBytes = null;  
    24                 using (MemoryStream ms = new MemoryStream())  
    25                 {  
    26                     using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))  
    27                     {  
    28                         cs.Write(inputByteArray, 0, inputByteArray.Length);  
    29                         cs.FlushFinalBlock();  
    30                         cipherBytes = ms.ToArray();//得到加密后的字节数组  
    31                         cs.Close();  
    32                         ms.Close();  
    33                     }  
    34                 }  
    35                 return Convert.ToBase64String(cipherBytes);  
    36             }  
    37             catch { }  
    38             return Text;  
    39         }  
    40   
    41         /// <summary>  
    42         /// AES解密  
    43         /// </summary>  
    44         /// <param name="Text">待解密字符串</param>  
    45         /// <returns>解密后字符串</returns>  
    46         public static string AESDecrypt(string Text)  
    47         {  
    48             try  
    49             {  
    50                 string key = AES_KEY;  
    51                 byte[] cipherText = Convert.FromBase64String(Text);  
    52                 AesCryptoServiceProvider aes = new AesCryptoServiceProvider();  
    53                 aes.Key = Encoding.UTF8.GetBytes(key);  
    54                 //aes.IV = Encoding.UTF8.GetBytes(key);  
    55                 aes.Mode = CipherMode.ECB;  
    56                 aes.Padding = PaddingMode.PKCS7;  
    57                 byte[] decryptBytes = new byte[cipherText.Length];  
    58                 using (MemoryStream ms = new MemoryStream(cipherText))  
    59                 {  
    60                     using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))  
    61                     {  
    62                         cs.Read(decryptBytes, 0, decryptBytes.Length);  
    63                         cs.Close();  
    64                         ms.Close();  
    65                     }  
    66                 }  
    67                 return Encoding.UTF8.GetString(decryptBytes).Replace("", "");   //将字符串后尾的''去掉  
    68             }  
    69             catch { }  
    70             return Text;  
    71         }  
    72     }  
    C#
      1 /*
      2  *.h文件
      3  */
      4 #import <Foundation/Foundation.h>  
      5   
      6 @interface Security : NSObject  
      7 +(NSString*)AesEncrypt:(NSString*)str;  
      8 +(NSString*)AesDecrypt:(NSString*)str;  
      9 @end  
     10 
     11 --------------------------------------------------------------------------------
     12 
     13 /*
     14  *.m文件
     15  */
     16 #import "Security.h"  
     17 #import <CommonCrypto/CommonCryptor.h>  
     18 static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";  
     19 #define LocalStr_None @"" //空字符串  
     20   
     21 @implementation Security  
     22   
     23 /* 
     24  * AES加密 
     25  * 
     26  */  
     27 +(NSString*)AesEncrypt:(NSString*)str{  
     28     NSString *key=@"43hr8fhu34b58123"; // 密钥  
     29     NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding]; // 待加密字符转为NSData型  
     30     char keyPtr[kCCKeySizeAES128 + 1];  
     31     memset(keyPtr, 0, sizeof(keyPtr));  
     32     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
     33       
     34     NSUInteger dataLength = [data length];  
     35     size_t bufferSize = dataLength + kCCBlockSizeAES128;  
     36     voidvoid *buffer = malloc(bufferSize);  
     37       
     38     size_t numBytesCrypted = 0;  
     39     CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,  
     40                                           kCCAlgorithmAES128,  
     41                                           kCCOptionPKCS7Padding|kCCOptionECBMode,  
     42                                           keyPtr,  
     43                                           kCCBlockSizeAES128,  
     44                                           nil,  
     45                                           [data bytes],  
     46                                           dataLength,  
     47                                           buffer,  
     48                                           bufferSize,  
     49                                           &numBytesCrypted);  
     50     if (cryptStatus == kCCSuccess) {  
     51         NSData *resultData=[NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];  
     52         NSString *result =[self base64EncodedStringFrom:resultData];  
     53         return result;  
     54     }  
     55     free(buffer);  
     56     return str;  
     57 }  
     58   
     59 /* 
     60  * AES解密 
     61  * 
     62  */  
     63 +(NSString*)AesDecrypt:(NSString*)str{  
     64     NSString *key=@"Q*1_3@c!4kd^j&g%"; // 密钥  
     65     NSData *data=[self dataWithBase64EncodedString:str]; // base4解码  
     66     char keyPtr[kCCKeySizeAES128 + 1];  
     67     memset(keyPtr, 0, sizeof(keyPtr));  
     68     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
     69       
     70     NSUInteger dataLength = [data length];  
     71     size_t bufferSize = dataLength + kCCBlockSizeAES128;  
     72     voidvoid *buffer = malloc(bufferSize);  
     73       
     74     size_t numBytesCrypted = 0;  
     75     CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,  
     76                                           kCCAlgorithmAES128,  
     77                                           kCCOptionPKCS7Padding|kCCOptionECBMode,  
     78                                           keyPtr,  
     79                                           kCCBlockSizeAES128,  
     80                                           nil,  
     81                                           [data bytes],  
     82                                           dataLength,  
     83                                           buffer,  
     84                                           bufferSize,  
     85                                           &numBytesCrypted);  
     86     if (cryptStatus == kCCSuccess) {  
     87         NSData *resultData=[NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];  
     88         NSString *result =[[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];  
     89         return result;  
     90     }  
     91     free(buffer);  
     92     return str;  
     93 }  
     94   
     95   
     96 + (NSString *)base64StringFromText:(NSString *)text  
     97 {  
     98     if (text && ![text isEqualToString:LocalStr_None]) {  
     99         NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];  
    100         return [self base64EncodedStringFrom:data];  
    101     }  
    102     else {  
    103         return LocalStr_None;  
    104     }  
    105 }  
    106   
    107 + (NSString *)textFromBase64String:(NSString *)base64  
    108 {  
    109     if (base64 && ![base64 isEqualToString:LocalStr_None]) {  
    110         NSData *data = [self dataWithBase64EncodedString:base64];  
    111         return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];  
    112     }  
    113     else {  
    114         return LocalStr_None;  
    115     }  
    116 }  
    117   
    118 + (NSData *)dataWithBase64EncodedString:(NSString *)string  
    119 {  
    120     if (string == nil)  
    121         [NSException raise:NSInvalidArgumentException format:nil];  
    122     if ([string length] == 0)  
    123         return [NSData data];  
    124       
    125     static charchar *decodingTable = NULL;  
    126     if (decodingTable == NULL)  
    127     {  
    128         decodingTable = malloc(256);  
    129         if (decodingTable == NULL)  
    130             return nil;  
    131         memset(decodingTable, CHAR_MAX, 256);  
    132         NSUInteger i;  
    133         for (i = 0; i < 64; i++)  
    134             decodingTable[(short)encodingTable[i]] = i;  
    135     }  
    136       
    137     const charchar *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];  
    138     if (characters == NULL)     //  Not an ASCII string!  
    139         return nil;  
    140     charchar *bytes = malloc((([string length] + 3) / 4) * 3);  
    141     if (bytes == NULL)  
    142         return nil;  
    143     NSUInteger length = 0;  
    144       
    145     NSUInteger i = 0;  
    146     while (YES)  
    147     {  
    148         char buffer[4];  
    149         short bufferLength;  
    150         for (bufferLength = 0; bufferLength < 4; i++)  
    151         {  
    152             if (characters[i] == '')  
    153                 break;  
    154             if (isspace(characters[i]) || characters[i] == '=')  
    155                 continue;  
    156             buffer[bufferLength] = decodingTable[(short)characters[i]];  
    157             if (buffer[bufferLength++] == CHAR_MAX)      //  Illegal character!  
    158             {  
    159                 free(bytes);  
    160                 return nil;  
    161             }  
    162         }  
    163           
    164         if (bufferLength == 0)  
    165             break;  
    166         if (bufferLength == 1)      //  At least two characters are needed to produce one byte!  
    167         {  
    168             free(bytes);  
    169             return nil;  
    170         }  
    171           
    172         //  Decode the characters in the buffer to bytes.  
    173         bytes[length++] = (buffer[0] << 2) | (buffer[1] >> 4);  
    174         if (bufferLength > 2)  
    175             bytes[length++] = (buffer[1] << 4) | (buffer[2] >> 2);  
    176         if (bufferLength > 3)  
    177             bytes[length++] = (buffer[2] << 6) | buffer[3];  
    178     }  
    179       
    180     bytes = realloc(bytes, length);  
    181     return [NSData dataWithBytesNoCopy:bytes length:length];  
    182 }  
    183   
    184 + (NSString *)base64EncodedStringFrom:(NSData *)data  
    185 {  
    186     if ([data length] == 0)  
    187         return @"";  
    188       
    189     charchar *characters = malloc((([data length] + 2) / 3) * 4);  
    190     if (characters == NULL)  
    191         return nil;  
    192     NSUInteger length = 0;  
    193       
    194     NSUInteger i = 0;  
    195     while (i < [data length])  
    196     {  
    197         char buffer[3] = {0,0,0};  
    198         short bufferLength = 0;  
    199         while (bufferLength < 3 && i < [data length])  
    200             buffer[bufferLength++] = ((charchar *)[data bytes])[i++];  
    201           
    202         //  Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.  
    203         characters[length++] = encodingTable[(buffer[0] & 0xFC) >> 2];  
    204         characters[length++] = encodingTable[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)];  
    205         if (bufferLength > 1)  
    206             characters[length++] = encodingTable[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)];  
    207         else characters[length++] = '=';  
    208         if (bufferLength > 2)  
    209             characters[length++] = encodingTable[buffer[2] & 0x3F];  
    210         else characters[length++] = '=';  
    211     }  
    212       
    213     return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES];  
    214 }  
    215   
    216 @end  
    Objective-C
  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/sater/p/7018784.html
Copyright © 2011-2022 走看看