2011-08-24 91 views
1

我使用PHP在DES算法中使用PKCS#7填充字符串進行加密。如何在iOS中解密DES加密字符串?

我想知道如何在iOS中使用CCCrypt來解密DES加密字符串。欣賞它,如果你能提供一些示例代碼來幫助我。

謝謝。

+0

你嘗試過什麼? – jtbandes

+0

我嘗試了一些CCCrypt教程,但他們都沒有談論DES。 – user403015

+0

看看這裏:http://stackoverflow.com/questions/4611256/is-there-any-api-that-c​​ould-use-to-call-the-des-encrypt-and-decrypt-in-目標 – MByD

回答

-1
- (NSData *)encryptDESByKey:(NSData *)key data:(NSData *)data 
{ 
size_t numBytesEncrypted = 0; 
size_t bufferSize = data.length + kCCBlockSizeDES; 
void *buffer = malloc(bufferSize); 

CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, 
           key.bytes, kCCKeySizeDES, 
           NULL, 
           data.bytes, data.length, 
           buffer, bufferSize, 
           &numBytesEncrypted); 
NSData *output = [NSData dataWithBytes:buffer length:numBytesEncrypted]; 
free(buffer); 
if(result == kCCSuccess) 
{ 
    NSLog(@"encoded str %@",[output base64EncodedStringWithOptions:0]); 
    return output; 
} else { 
    NSLog(@"Failed DES encrypt..."); 
    return nil; 
} 
} 
- (NSData *) decryptDESByKey:(NSData *)key data:(NSData *)data 
{ 
size_t numBytesEncrypted = 0; 

size_t bufferSize = data.length + kCCBlockSizeDES; 
void *buffer_decrypt = malloc(bufferSize); 
CCCryptorStatus result = CCCrypt(kCCDecrypt , kCCAlgorithmDES, kCCOptionPKCS7Padding, 
           key.bytes, kCCKeySizeDES, 
           NULL, 
           data.bytes, data.length, 
           buffer_decrypt, bufferSize, 
           &numBytesEncrypted); 

NSData *output = [NSData dataWithBytes:buffer_decrypt length:numBytesEncrypted]; 
free(buffer_decrypt); 
if(result == kCCSuccess) 
{ 
    NSString *decodedString = [[NSString alloc] initWithData:output encoding:NSUTF8StringEncoding]; 
    NSLog(@"decoded str %@",decodedString); 
    return output; 
} else { 
    NSLog(@"Failed DES decrypt ..."); 
    return nil; 
} 
} 

- 然後你就可以調用方法一樣

​​3210

- 「qwertykey」 是祕密密鑰提供

+0

**這個例子不安全**:默認情況下'CCCrypt'使用CBC模式,但不提供IV。使用靜態IV是不安全的,IV需要是由每次加密唯一的CSPRNG生成的隨機字節數組,IV可以將加密數據作爲解密前綴,但不需要保密。如果使用密碼字符串,則需要使用Common Crypto支持的功能(例如PBKDF2 *)從中導出解密密鑰)。 – zaph