AES加解密以及示例
来源:互联网 发布:单片机烟雾报警器 编辑:程序博客网 时间:2024/05/21 11:32
网上AES加解密的代码很多,其基本原理都差不多,很多都是直接将明文通过AES加密生成含有特殊的密文,而这些密文可能需要添加到url,这样就有可能被解析错了,所以有事需要将密文转化为ascii码,本文就是转化为ascii码,这样可以直接加在url后面直接请求接口了。当然里面还有很多的配置参数要适合自己了,要不然,呵呵?
很多时候发现在iOS端加完密之后和Java端加密结果甚为不一样,那么该怎么办呢?
看下文喽:
AES加解密的代码如下:
- (NSData *)AES256ParmEncryptWithKey:(NSString *)key //加密{ char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); return nil;}- (NSData *)AES256ParmDecryptWithKey:(NSString *)key //解密{ char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [self bytes], dataLength, buffer, bufferSize, &numBytesDecrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; } free(buffer); return nil;}
以下示例:
- (void)secretAdd { NSString *Token = @"CHINAPAPER#@$%"; NSData *mi = [[@"chinapaper:1234567890" dataUsingEncoding:NSUTF8StringEncoding] AES256ParmEncryptWithKey:Token]; NSString *s1 = [[NSString alloc]initWithData:mi encoding:NSUTF8StringEncoding]; LILog(@"%@", s1); NSMutableString *stttt = [NSMutableString string]; Byte *plainTextByte1 = (Byte *)[mi bytes]; printf("%s", plainTextByte1); for (int i = 0; i < [mi length]; i++){ [stttt appendString:[NSString stringWithFormat:@"%02x", plainTextByte1[i]]]; } LILog(@"====%@====", stttt); [self unlock:mi andByte:plainTextByte1 andStr:stttt];}- (void)unlock:(NSData *)mii andByte:(Byte *)s andStr:(NSString *)cdcd{ NSString *Token = @"CHINAPAPER#@$%"; NSData *data = [self _16ToByte:cdcd]; NSData *mi = [data AES256ParmDecryptWithKey:Token]; NSMutableString *stttt = [NSMutableString string]; Byte *plainTextByte1 = (Byte *)[mi bytes]; for (int i = 0; i < [mi length]; i++){ [stttt appendString:[NSString stringWithFormat:@"%02x", plainTextByte1[i]]]; } NSString *str = [[NSString alloc]initWithData:mi encoding:NSUTF8StringEncoding]; LILog(@"====%@====", str);}- (NSData *)_16ToByte:(NSString *)hexString { int j=0; Byte bytes[[hexString length] / 2]; ///3ds key的Byte 数组, 128位 for(int i=0;i<[hexString length];i++) { int int_ch; /// 两位16进制数转化后的10进制数 unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16) int int_ch1; if(hex_char1 >= '0' && hex_char1 <='9') int_ch1 = (hex_char1-48)*16; //// 0 的Ascll - 48 else if(hex_char1 >= 'A' && hex_char1 <='F') int_ch1 = (hex_char1-55)*16; //// A 的Ascll - 65 else int_ch1 = (hex_char1-87)*16; //// a 的Ascll - 97 i++; unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位) int int_ch2; if(hex_char2 >= '0' && hex_char2 <='9') int_ch2 = (hex_char2-48); //// 0 的Ascll - 48 else if(hex_char1 >= 'A' && hex_char1 <='F') int_ch2 = hex_char2-55; //// A 的Ascll - 65 else int_ch2 = hex_char2-87; //// a 的Ascll - 97 int_ch = int_ch1+int_ch2; NSLog(@"int_ch=%d",int_ch); bytes[j] = int_ch; ///将转化后的数放入Byte数组里 j++; } NSData *newData = [[NSData alloc] initWithBytes:bytes length:[hexString length] / 2]; return newData;}
例子有点乱,但是基本实现了加解密,可以参考,对于加解密的原理,有机会再解释吧~
0 0
- AES加解密以及示例
- Java之AES加解密示例
- iOS之AES加解密示例
- Java、C#双语版配套AES加解密示例
- Java、C#双语版配套AES加解密示例
- Java、C#双语版配套AES加解密示例
- AES加解密算法
- aes加解密
- iOS-AES加解密
- erlang aes 加解密
- c# AES加解密
- AES加解密
- AES加解密算法
- AES加解密
- AES 加解密
- 文件AES加解密
- 关于AES加解密
- AES加解密
- 你所谓的努力,有事其实一文不值-------献给深陷bat的码农们
- 使用Qt制作一个简易计算器
- switch里面不能做什么?
- Android开发从零开始(1)--2016.01.18
- sublime Text2编译lua(windows平台)
- AES加解密以及示例
- CBC6 皮肤VclSkin5.6的安装
- Java抽象类与抽象方法
- 实习期间的心态调整
- 我的Android进阶之旅------>关于使用CSDN-markdown编辑器来编写博客
- 复数相关的等式及证明
- 手机横屏切换竖屏导致捕鱼充值界面崩溃
- Protocol Buffer技术详解(语言规范)
- 机器学习与数据挖掘、计算机视觉方法资料汇总(永久更新)