和java的DES/ECB/PKCS5Padding相同的objc实现方式
2016-06-30 12:19
621 查看
java是:DES/ECB/PKCS5Padding
1、是DES,不是3DES。
2、分组方式是ECB,所以不需要初始化向量。
3、填充模式是PKCS5Padding。
在stackoverflow上查,说iOS是不支持PKCS5Padding的,但是继续查找后实际是支持的,只是方式很怪异。
-(NSString*) decryptUseDES:(NSString*)plainText {
NSString * key = @"akey";
NSString *ciphertext = nil;
NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger dataLength = [textData length];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
//这个地方很奇怪,这种组合方式实现的结果就是java的PKCS5Padding模式了。
//不知道为什么参数中指明的是kCCOptionPKCS7Padding,而实际的填充就是PKCS5Padding了。
kCCOptionECBMode | kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
NULL,
//ECB模式,不需要初始化向量。
[textData bytes], dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
NSUInteger capacity = data.length * 2;
NSMutableString *sbuf = [NSMutableString stringWithCapacity:capacity];
const unsigned char *buf = data.bytes;
NSInteger i;
for (i=0; i<data.length; ++i) {
[sbuf appendFormat:@"%02X", (NSUInteger)buf[i]];
}
ciphertext = [sbuf copy];
}
return ciphertext;
}
1、是DES,不是3DES。
2、分组方式是ECB,所以不需要初始化向量。
3、填充模式是PKCS5Padding。
在stackoverflow上查,说iOS是不支持PKCS5Padding的,但是继续查找后实际是支持的,只是方式很怪异。
-(NSString*) decryptUseDES:(NSString*)plainText {
NSString * key = @"akey";
NSString *ciphertext = nil;
NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger dataLength = [textData length];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
//这个地方很奇怪,这种组合方式实现的结果就是java的PKCS5Padding模式了。
//不知道为什么参数中指明的是kCCOptionPKCS7Padding,而实际的填充就是PKCS5Padding了。
kCCOptionECBMode | kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
NULL,
//ECB模式,不需要初始化向量。
[textData bytes], dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
NSUInteger capacity = data.length * 2;
NSMutableString *sbuf = [NSMutableString stringWithCapacity:capacity];
const unsigned char *buf = data.bytes;
NSInteger i;
for (i=0; i<data.length; ++i) {
[sbuf appendFormat:@"%02X", (NSUInteger)buf[i]];
}
ciphertext = [sbuf copy];
}
return ciphertext;
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序