/**
* AES加解密
*/
public class AESHelper {
final static String AES_KEY = "43hr8fhu34b58123"; /**
* AES加密
*
* @param text
* 待加密字符串
* @return 加密后字符串
*/
public static String AESEncrypt(String text) {
try {
String password = AES_KEY;
SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
String strTmp = Base64.encodeToString(cipher.doFinal(text.getBytes()), Base64.DEFAULT);
return strTmp;
} catch (Exception e) {
e.printStackTrace();
}
return text;
} /**
* AES解密
*
* @param text
* 待解密字符串
* @return 解密后字符串
*/
public static String aesDecrypt(String text) {
try {
String password = AES_KEY;
SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
String strTmp = new String(cipher.doFinal(Base64.decode(text, Base64.DEFAULT)));
return strTmp;
} catch (Exception ex) {
ex.printStackTrace();
}
return text;
}
}

Java

 public class AESHelper
{
const string AES_KEY = "43hr8fhu34b58123"; /// <summary>
/// AES加密
/// </summary>
/// <param name="Text">待加密字符串</param>
/// <returns>加密后字符串</returns>
public static string AESEncrypt(string Text)
{
try
{
string key = AES_KEY;
//分组加密算法
AesCryptoServiceProvider aes =new AesCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(Text);//得到需要加密的字节数组
//设置密钥及密钥向量
aes.Key = Encoding.UTF8.GetBytes(key);
//aes.IV = Encoding.UTF8.GetBytes(key);
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
byte[] cipherBytes = null;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
cipherBytes = ms.ToArray();//得到加密后的字节数组
cs.Close();
ms.Close();
}
}
return Convert.ToBase64String(cipherBytes);
}
catch { }
return Text;
} /// <summary>
/// AES解密
/// </summary>
/// <param name="Text">待解密字符串</param>
/// <returns>解密后字符串</returns>
public static string AESDecrypt(string Text)
{
try
{
string key = AES_KEY;
byte[] cipherText = Convert.FromBase64String(Text);
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.Key = Encoding.UTF8.GetBytes(key);
//aes.IV = Encoding.UTF8.GetBytes(key);
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
byte[] decryptBytes = new byte[cipherText.Length];
using (MemoryStream ms = new MemoryStream(cipherText))
{
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))
{
cs.Read(decryptBytes, , decryptBytes.Length);
cs.Close();
ms.Close();
}
}
return Encoding.UTF8.GetString(decryptBytes).Replace("\0", ""); //将字符串后尾的'\0'去掉
}
catch { }
return Text;
}
}

C#

 /*
*.h文件
*/
#import <Foundation/Foundation.h> @interface Security : NSObject
+(NSString*)AesEncrypt:(NSString*)str;
+(NSString*)AesDecrypt:(NSString*)str;
@end -------------------------------------------------------------------------------- /*
*.m文件
*/
#import "Security.h"
#import <CommonCrypto/CommonCryptor.h>
static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
#define LocalStr_None @"" //空字符串 @implementation Security /*
* AES加密
*
*/
+(NSString*)AesEncrypt:(NSString*)str{
NSString *key=@"43hr8fhu34b58123"; // 密钥
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding]; // 待加密字符转为NSData型
char keyPtr[kCCKeySizeAES128 + ];
memset(keyPtr, , sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
voidvoid *buffer = malloc(bufferSize); size_t numBytesCrypted = ;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding|kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
nil,
[data bytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
if (cryptStatus == kCCSuccess) {
NSData *resultData=[NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
NSString *result =[self base64EncodedStringFrom:resultData];
return result;
}
free(buffer);
return str;
} /*
* AES解密
*
*/
+(NSString*)AesDecrypt:(NSString*)str{
NSString *key=@"Q*1_3@c!4kd^j&g%"; // 密钥
NSData *data=[self dataWithBase64EncodedString:str]; // base4解码
char keyPtr[kCCKeySizeAES128 + ];
memset(keyPtr, , sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
voidvoid *buffer = malloc(bufferSize); size_t numBytesCrypted = ;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding|kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
nil,
[data bytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
if (cryptStatus == kCCSuccess) {
NSData *resultData=[NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
NSString *result =[[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
return result;
}
free(buffer);
return str;
} + (NSString *)base64StringFromText:(NSString *)text
{
if (text && ![text isEqualToString:LocalStr_None]) {
NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];
return [self base64EncodedStringFrom:data];
}
else {
return LocalStr_None;
}
} + (NSString *)textFromBase64String:(NSString *)base64
{
if (base64 && ![base64 isEqualToString:LocalStr_None]) {
NSData *data = [self dataWithBase64EncodedString:base64];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
else {
return LocalStr_None;
}
} + (NSData *)dataWithBase64EncodedString:(NSString *)string
{
if (string == nil)
[NSException raise:NSInvalidArgumentException format:nil];
if ([string length] == )
return [NSData data]; static charchar *decodingTable = NULL;
if (decodingTable == NULL)
{
decodingTable = malloc();
if (decodingTable == NULL)
return nil;
memset(decodingTable, CHAR_MAX, );
NSUInteger i;
for (i = ; i < ; i++)
decodingTable[(short)encodingTable[i]] = i;
} const charchar *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];
if (characters == NULL) // Not an ASCII string!
return nil;
charchar *bytes = malloc((([string length] + ) / ) * );
if (bytes == NULL)
return nil;
NSUInteger length = ; NSUInteger i = ;
while (YES)
{
char buffer[];
short bufferLength;
for (bufferLength = ; bufferLength < ; i++)
{
if (characters[i] == '\0')
break;
if (isspace(characters[i]) || characters[i] == '=')
continue;
buffer[bufferLength] = decodingTable[(short)characters[i]];
if (buffer[bufferLength++] == CHAR_MAX) // Illegal character!
{
free(bytes);
return nil;
}
} if (bufferLength == )
break;
if (bufferLength == ) // At least two characters are needed to produce one byte!
{
free(bytes);
return nil;
} // Decode the characters in the buffer to bytes.
bytes[length++] = (buffer[] << ) | (buffer[] >> );
if (bufferLength > )
bytes[length++] = (buffer[] << ) | (buffer[] >> );
if (bufferLength > )
bytes[length++] = (buffer[] << ) | buffer[];
} bytes = realloc(bytes, length);
return [NSData dataWithBytesNoCopy:bytes length:length];
} + (NSString *)base64EncodedStringFrom:(NSData *)data
{
if ([data length] == )
return @""; charchar *characters = malloc((([data length] + ) / ) * );
if (characters == NULL)
return nil;
NSUInteger length = ; NSUInteger i = ;
while (i < [data length])
{
char buffer[] = {,,};
short bufferLength = ;
while (bufferLength < && i < [data length])
buffer[bufferLength++] = ((charchar *)[data bytes])[i++]; // Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.
characters[length++] = encodingTable[(buffer[] & 0xFC) >> ];
characters[length++] = encodingTable[((buffer[] & 0x03) << ) | ((buffer[] & 0xF0) >> )];
if (bufferLength > )
characters[length++] = encodingTable[((buffer[] & 0x0F) << ) | ((buffer[] & 0xC0) >> )];
else characters[length++] = '=';
if (bufferLength > )
characters[length++] = encodingTable[buffer[] & 0x3F];
else characters[length++] = '=';
} return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES];
} @end

Objective-C

java C# objective-c AES对称加解密的更多相关文章

  1. AES对称加解密

    简介设计思想加密模式ECB模式(电子密码本模式:Electronic codebook)CBC模式(密码分组链接:Cipher-block chaining)CFB模式(密文反馈:Cipher fee ...

  2. Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密

    本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1.  摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...

  3. AES对称加密解密类

    import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...

  4. php des 对称加解密类

    <?php header("Content-Type: text/html;charset=utf-8"); /** * des 对称加解密 */ class des { p ...

  5. node.js 实现 AES CTR 加解密

    node.js 实现 AES CTR 加解密 node aesctr 前言 由于最近我们在做一款安全的文件分享 App, 所有文件均需要使用 aes ctr 来进行加密,aes key 还有一整套完整 ...

  6. 最新版-Python和Java实现Aes相互加解密

    前情 需要使用Python和Java实现同一个AES加解密算法,使Python版本加密的密文能够由Java代码解密,反之亦然. Python实现 Python为3.6版本 # -*- coding: ...

  7. JAVA AES文件加解密

    AES加解密算法,代码如下: /** * Created by hua on 2017/6/30. */ import javax.crypto.Cipher; import javax.crypto ...

  8. Java拓展教程:文件DES加解密

    Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...

  9. JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致

    终于有机会生产JAVA的东东了. 有点兴奋. 花了一天搞完.. java(关键key及算法有缩减): package com.security; import javax.crypto.Cipher; ...

随机推荐

  1. asp.net——正则表达式

    在平时的开发中常常用到替换法:  普通的字符串替换可以使用string.replace(string,string),但是比较难解决HTML文本的替换. 经我几番查找,终也找出解决办法:正则匹配替换. ...

  2. JavaScript日期(参考资料)

    构造函数1.new Date() 如果没有参数,则Date的构造器会依据系统设置的当前时间来创建一个Date对象.2.new Date(value) value代表自1970年1月1日00:00:00 ...

  3. 关于My Sql update语句不能用子查询的解决办法

    在使用My Sql数据库语法操作update时,第一时间想到的是一下写法: UPDATE purchase_request_detail SET convert_to_voucher_id=, con ...

  4. js自执行函数、调用递归函数、圆括号运算符、函数声明的提升

    前言 起因是我要在jquery的ajax中需要根据返回值来决定是否继续发起ajax请求,这是一个有条件的循环,符合条件就跳出.可以使用while循环的,但是想了想还是递归调用好用. 调用递归函数 递归 ...

  5. django drf django-filter的method过滤

    1.View Demo from django.shortcuts import render from rest_framework.views import APIView from rest_f ...

  6. Let it crash philosophy part II

    Designing fault tolerant systems is extremely difficult.  You can try to anticipate and reason about ...

  7. vue 动态组件

    动态组件 多个组件通过同一个挂载点进行组件的切换,is的值是哪个组件的名称,那么页面就会显示哪个组件 内置组件 (内置组件不会被渲染到页面上) component is属性     keep-aliv ...

  8. iOS没你想的那么安全?

    iOS应用由于直接运行在用户的手机上,而不是运行在后台服务器上,所以更容易被攻击. 任何系统都会有木马病毒的产生,不存在绝对的安全,iOS应用由于直接运行在用户的手机上,而不是运行在后台服务器上,所以 ...

  9. 部署LVS-DR群集

    一.LVS-DR原理剖析 (一)LVS-DR数据包流向分析 1.Client向目标VIP发出请求,Director(负载均衡器)接收.此时IP包头及数据帧头信息为: 2.Director根据负载均衡算 ...

  10. POJ 2192

    #include <iostream> #include <string> #define MAXN 500 using namespace std; bool dp[MAXN ...