java C# objective-c AES对称加解密
/**
* 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对称加解密的更多相关文章
- AES对称加解密
简介设计思想加密模式ECB模式(电子密码本模式:Electronic codebook)CBC模式(密码分组链接:Cipher-block chaining)CFB模式(密文反馈:Cipher fee ...
- Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密
本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1. 摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...
- AES对称加密解密类
import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...
- php des 对称加解密类
<?php header("Content-Type: text/html;charset=utf-8"); /** * des 对称加解密 */ class des { p ...
- node.js 实现 AES CTR 加解密
node.js 实现 AES CTR 加解密 node aesctr 前言 由于最近我们在做一款安全的文件分享 App, 所有文件均需要使用 aes ctr 来进行加密,aes key 还有一整套完整 ...
- 最新版-Python和Java实现Aes相互加解密
前情 需要使用Python和Java实现同一个AES加解密算法,使Python版本加密的密文能够由Java代码解密,反之亦然. Python实现 Python为3.6版本 # -*- coding: ...
- JAVA AES文件加解密
AES加解密算法,代码如下: /** * Created by hua on 2017/6/30. */ import javax.crypto.Cipher; import javax.crypto ...
- Java拓展教程:文件DES加解密
Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...
- JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致
终于有机会生产JAVA的东东了. 有点兴奋. 花了一天搞完.. java(关键key及算法有缩减): package com.security; import javax.crypto.Cipher; ...
随机推荐
- shell脚本修改文件
https://blog.csdn.net/qq_37674858/article/details/80066264 2.2 使用sed命令对文件中的字符替换 例如:将aaaa字符串修改为bbbb [ ...
- mvc和mvvm的区别?
源自:https://segmentfault.com/q/1010000000534091?_ea=178721 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与 ...
- 'Install app for SharePoint': Sideloading of apps is not enabled on this site
http://blog.lekman.com/2012/11/sharepoint-2013-sideloading-of-apps-is.html Solution: You need to ena ...
- c语言博客作业06-文件
1.本章总结 1.1思维导图 1.2本章学习体会 这周学了结构体和文件,结构体作为一种数据的归类方式,相比数组或变量更具有整体全面性,例如一个数组只可以放一些按照元素顺序存放的单元变量,并且我们用 ...
- 12c ocp 062新考题(之前没出现过)-1
1.One of your databases has archive logging enabled and RMAN backups are taken at regular intervals. ...
- 【文文殿下】对后缀自动机(SAM)的理解
后缀自动机,是一种数据结构,是由状态和转移关系构成的.它虽然叫做后缀自动机,可是他却与后缀并没有什么太大的联系. 后缀自动机的每一种状态都是原串的一些子串的集合,每个子串只唯一存在于某个状态中,对每一 ...
- 如何在WS系统的DOS命令台打印JAVA_HOME变量
echo %JAVA_HOME% 查看环境变量 path 新增临时环境变量 path D:\test;%path% 注意是反斜杆 cls 清空 F7 显示历史CMD指令
- 使用wblockCloneObjects从后台读取dwg文件复制实体到当前数据库
AcDbDatabase *pNewDb=new AcDbDatabase(Adesk::kFalse); if (pNewDb == NULL) { return; } Acad::ErrorSta ...
- CTF常见加密方式汇总
1.栅栏密码 在IDF训练营里做过一道关于栅栏密码的问题. 栅栏密码的解法很简单,也有点复杂,字符长度因数多得会有很多个密码.对,栅栏密码的解法就是:计算该字符串是否为合数,若为合数,则求出该合数除本 ...
- jmeter结果分析(图形报表和聚合报告)
采用Jmeter测试工具对web系统作的负载测试,得出的响应报表,数据比较难懂,现作一具体说明.以下是在一次具体负载测试中得出的具体数值,测试线程设置情况为:线程数:200,等待时间(ramp-up) ...