如何使用DES在iPhone上加密NSString值? [英] How to encrypt the NSString value using DES in iPhone?

查看:147
本文介绍了如何使用DES在iPhone上加密NSString值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  NSString * token = @encryptValue;我使用以下代码来加密NSString值。 
NSString * key = @encryptKey;

NSData * keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData * plainData = [token dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData * encData = [NSMutableData dataWithLength:plainData.length + 256];
size_t bytesWritten = 0;
CCCryptorStatus ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[keyData bytes],
kCCKeySizeDES,
NULL,
[plainData字节],
[plainData length],
encData.mutableBytes,
encData.length,
& bytesWritten);
encData.length = bytesWritten;
NSString * encrypted = [[NSString alloc] initWithBytes:[encData bytes] length:[encData length] encoding:NSUTF8StringEncoding];
NSLog(@ENCRYPT:%@,加密);

但我得到(null)是结果。有什么问题吗?如何加密NSString值?

解决方案

最后我完成了以下代码,现在它的工作正常。

   - (NSString *)doCipher:(NSString *)encryptValue {

const void * vplainText;
size_t plainTextBufferSize = [encryptValue length];
vplainText =(const void *)[encryptValue UTF8String];
CCCryptorStatus ccStatus;
uint8_t * bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;

bufferPtrSize =(plainTextBufferSize + kCCBlockSizeDES)& 〜(kCCBlockSizeDES - 1);
bufferPtr = malloc(bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr,0x0,bufferPtrSize);

Byte iv [] = {0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef};

NSString * key = @encryptKey;
const void * vkey =(const void *)[key UTF8String];

ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,
vkey,
kCCKeySizeDES,
iv,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
& movedBytes);

NSData * myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
NSString * result = [myData base64Encoding];

返回结果;
}


I used following code to encrypt the NSString value with Key,

NSString *token = @"encryptValue";
NSString *key = @"encryptKey";

NSData * keyData = [key dataUsingEncoding: NSUTF8StringEncoding];
NSData * plainData = [token dataUsingEncoding: NSUTF8StringEncoding];
NSMutableData * encData = [NSMutableData dataWithLength: plainData.length + 256];
size_t bytesWritten = 0;
CCCryptorStatus ccStatus = CCCrypt (kCCEncrypt,
                    kCCAlgorithmDES,
                    kCCOptionPKCS7Padding,
                    [keyData bytes], 
                    kCCKeySizeDES,
                    NULL,
                    [plainData bytes],
                    [plainData length],
                    encData.mutableBytes,
                    encData.length,
                    &bytesWritten);
encData.length = bytesWritten;    
NSString *encrypted = [[NSString alloc]  initWithBytes:[encData bytes] length:[encData length] encoding: NSUTF8StringEncoding];  
NSLog(@"ENCRYPT : %@",encrypted); 

But I'm getting (null) is the result. Is anything wrong? How to encrypt the NSString value?

解决方案

Finally I done with following code and now its working fine.

- (NSString*) doCipher:(NSString*)encryptValue {

    const void *vplainText;
    size_t plainTextBufferSize = [encryptValue length];
    vplainText = (const void *) [encryptValue UTF8String];    
    CCCryptorStatus ccStatus;
    uint8_t *bufferPtr = NULL;
    size_t bufferPtrSize = 0;
    size_t movedBytes = 0;

    bufferPtrSize = (plainTextBufferSize + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
    bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
    memset((void *)bufferPtr, 0x0, bufferPtrSize);

    Byte iv [] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef};

    NSString *key = @"encryptKey";
    const void *vkey = (const void *) [key UTF8String];

    ccStatus = CCCrypt(kCCEncrypt,
                       kCCAlgorithmDES,
                       kCCOptionPKCS7Padding,
                       vkey, 
                       kCCKeySizeDES,
                       iv,
                       vplainText,
                       plainTextBufferSize,
                       (void *)bufferPtr,
                       bufferPtrSize,
                       &movedBytes);

    NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
    NSString *result = [myData base64Encoding]; 

   return result;
}

这篇关于如何使用DES在iPhone上加密NSString值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆