我下面加密IOS DES加密和解密PHP工作不可靠
-(NSString *) encrypt:(NSString *) data
{
const void *vplainText;
size_t plainTextBufferSize = [data length];
vplainText = (const void *) [data 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 = @"complexkey";
const void *vkey = (const void *) [key UTF8String];
ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
vkey,
kCCKeySizeDES,
iv,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
NSString *result = [myData base64Encoding];
// url encode the result
return (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef) result,
NULL,
(__bridge CFStringRef) @"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
}
而且在PHP中使用的方法在iOS中的字符串,我解密字符串如下 -
$decrypted = mcrypt_decrypt(MCRYPT_DES, 'complexkey', base64_decode(urldecode($encrypted)), MCRYPT_MODE_ECB);
這似乎75%的時間正確工作,我不知道爲什麼在其他時間失敗。任何線索?謝謝您的幫助!
請提供明確的錯誤說明。 「似乎不起作用」不是錯誤描述。 –
iOS或php都沒有錯誤信息。 PHP似乎並沒有正確解密郵件。 – Subhash