ios AES128加密解密算法
来源:互联网 发布:淘宝售后的服务流程 编辑:程序博客网 时间:2024/05/01 14:49
闲话不多说 直接上代码:
加密:
+(NSString *)AES128Encrypt:(NSString *)plainText
{
// int kCCKeySizeAES128;
// int kCCBlockSizeAES128;
char keyPtr[kCCKeySizeAES128+1];
memset(keyPtr, 0,sizeof(keyPtr));
[gkeygetCString:keyPtr maxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];
char ivPtr[kCCBlockSizeAES128+1];
memset(ivPtr, 0,sizeof(ivPtr));
[gIvgetCString:ivPtr maxLength:sizeof(ivPtr)encoding:NSUTF8StringEncoding];
NSData* data = [plainTextdataUsingEncoding:NSUTF8StringEncoding];
NSUInteger dataLength = [data length];
int diff =kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128);
int newSize = 0;
if(diff > 0)
{
newSize = dataLength + diff;
}
// char dataPtr[newSize];
Byte dataPtr[newSize];
memcpy(dataPtr, [data bytes], [data length]);
for(int i = 0; i < diff; i++)
{
dataPtr[i + dataLength] = 0x00;
}
size_t bufferSize = newSize + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
memset(buffer, 0, bufferSize);
size_t numBytesCrypted = 0;
NSString *key = SERVICE_key;
NSData *testData = [[keymd5HexDigest] dataUsingEncoding:NSUTF8StringEncoding];
Byte *testByte = (Byte *)[testDatabytes];
Byte keyByte[16];
for(int i=8;i<[testDatalength];i++){
if (i==24) {
break;
}
// NSLog(@"testByte = %d\n",testByte[i]);
keyByte[i-8]=testByte[i];
}
CCCryptorStatus cryptStatus =CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
0X0000, //No padding
keyByte,
kCCKeySizeAES128,
ivPtr,
dataPtr ,
sizeof(dataPtr),
buffer,
bufferSize,
&numBytesCrypted);
if (cryptStatus == kCCSuccess) {
NSData *resultData = [NSDatadataWithBytesNoCopy:buffer length:numBytesCrypted];
return [GTMBase64NewstringByEncodingData:resultData];
}
free(buffer);
return nil;
}
解密
+(NSString *)AES128Decrypt:(NSString *)encryptText
{
char keyPtr[kCCKeySizeAES128 +1];
memset(keyPtr, 0,sizeof(keyPtr));
[gkeygetCString:keyPtr maxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];
char ivPtr[kCCBlockSizeAES128 +1];
memset(ivPtr, 0,sizeof(ivPtr));
[gIvgetCString:ivPtr maxLength:sizeof(ivPtr)encoding:NSUTF8StringEncoding];
NSData *data = [GTMBase64NewdecodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesCrypted = 0;
// NSData *testData = [gkey dataUsingEncoding: NSUTF8StringEncoding];
NSString *key = SERVICE_key;
NSData *testData = [[keymd5HexDigest] dataUsingEncoding:NSUTF8StringEncoding];
Byte *testByte = (Byte *)[testDatabytes];
Byte keyByte[16];
for(int i=8;i<[testDatalength];i++){
if (i==24) {
break;
}
keyByte[i-8]=testByte[i];
}
CCCryptorStatus cryptStatus =CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
0X0000,
keyByte,
kCCKeySizeAES128,
ivPtr,
[data bytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
if (cryptStatus == kCCSuccess) {
NSData *resultData = [NSDatadataWithBytesNoCopy:buffer length:numBytesCrypted];
return [[[NSStringalloc] initWithData:resultData encoding:NSUTF8StringEncoding] autorelease];
}
free(buffer);
return nil;
}
将key就是一次md5加密 获得标准的固定16位字符, ;
所有key 以及加密算法都要和后台一致 才能成功;
- ios AES128加密解密算法
- iOS 调用 SecKeyWrapper 进行 AES128 加密解密
- iOS AES128 CBC No Padding加密解密
- JAVA AES128加密解密
- AES128加密解密方法
- iOS AES128加解密
- iOS AES128 CBC No Padding加密解密 (转载)
- [iOS]加密解密算法
- php AES128加密解密类的使用
- Android通过AES128加密解密字符串
- AES128的加密解密学习总结
- AES128加密解密以及参数的处理
- iOS-各种加密/解密算法
- iOS PBEwithMD5andDes加密解密算法
- AES128、AES256加密 在iOS上实现
- AES128算法
- AES128-ecb加解密
- iOS与PHP/Android AES128 ECB NoPadding加密
- AST解释执行
- 低版本手机浏览器不支持position: fixed的解决方法
- Linux常用命令(2):vi
- 栈虚拟机字节码
- java学习篇(四)---浅谈JUnit 3.8
- ios AES128加密解密算法
- ProtelDXP高级功能
- githubgrep
- linux下检测网卡与网线连通状态
- nyoj767因子和
- 华为2015机试题目汇总
- 寄存器虚拟机
- 日通过人员如图一突然又热又突然一天v
- WOJ(记忆化搜索)