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 }
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("\0", ""); //将字符串后尾的'\0'去掉 68 } 69 catch { } 70 return Text; 71 } 72 }
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] == '\0') 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