字符长度在《=300加密是成功的。 如果字符串的长度>300 ,那么DES加密只能加密 <=300以内的。 多出来的字符串长度就没有加密。直接丢失
请问各位大牛们` 如果我要加密<2000长度的DES加密方法要怎么写好呢
// 这个是我的加密方法
+(int)convertToInt:(NSString*)strtemp {
//计算中文和英文的混合长度
int strlength = 0;
char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return (strlength+1)/2;
}
+ (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key
{
NSString *encryptStr;
const char *textBytes = [plainText UTF8String];
NSUInteger dataLength =[self convertToInt:plainText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
IV,
textBytes, dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
encryptStr = [[NSString alloc] initWithData:[GTMBase64 encodeData:data] encoding:NSUTF8StringEncoding]; }
return encryptStr;}+ (NSString *) decryptUseDES:(NSString*)cipherText key:(NSString*)key
{
NSString* decryptStr;
NSData* cipherData = [GTMBase64 decodeString:cipherText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String],
kCCKeySizeDES,
IV,
[cipherData bytes],
[cipherData length],
buffer,
1024,
&numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
decryptStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
return decryptStr;
}
请问各位大牛们` 如果我要加密<2000长度的DES加密方法要怎么写好呢
// 这个是我的加密方法
+(int)convertToInt:(NSString*)strtemp {
//计算中文和英文的混合长度
int strlength = 0;
char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return (strlength+1)/2;
}
+ (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key
{
NSString *encryptStr;
const char *textBytes = [plainText UTF8String];
NSUInteger dataLength =[self convertToInt:plainText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
IV,
textBytes, dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
encryptStr = [[NSString alloc] initWithData:[GTMBase64 encodeData:data] encoding:NSUTF8StringEncoding]; }
return encryptStr;}+ (NSString *) decryptUseDES:(NSString*)cipherText key:(NSString*)key
{
NSString* decryptStr;
NSData* cipherData = [GTMBase64 decodeString:cipherText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String],
kCCKeySizeDES,
IV,
[cipherData bytes],
[cipherData length],
buffer,
1024,
&numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
decryptStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
return decryptStr;
}
解决方案 »
- cocos2d-x读写文件
- 【ios】发送请求的信息 怎样通过BCD压缩
- 如何用iPone sdk读取一个服务器上的所有文件夹,并将文件夹都显示在iPone模拟器上
- 关于web app的滑动效果
- 知道变量名求变量类型,,,object-c 有没有提供什么函数实现。如 - (Class)class;之类的,,
- 在选中textfield的时候选中里面所有文字,请问怎么实现?
- 在xcode5中安装ios6.1sdk
- 运行的时候报這个?什么问题?
- ANCS 配对成功后,退出APP,再打开app时如何链接
- IOS 自定义cell双击问题
- ios8.0以上presenteViewController求助
- 以上普通的json如何以这种方式展示
memset(buffer, 0, sizeof(char));
这个buffer的长度有问题,如果这样写死(1024),意思就是加密后的数据最多只能1024.正确的写法是根据输入数据的长度来确定输出的长度
size_t dataOutLen = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
void *dataOut = malloc( dataOutLen * sizeof(uint8_t));