Ich verwende diesen Code zum Verschlüsseln einer Zeichenfolge mit 3DES in IOS und ich möchte mit php entschlüsseln, aber es generiert eine Zeichenfolge länger, wenn ich kCCOptionPKCS7Padding (oder kürzer, wenn ich don benutze es nicht) wenn ich es entschlüssle mit php fügt es mehr oder weniger chars zu de string wie kann ich das beheben?Probleme mit der 3DES-Verschlüsselung schneiden oder erweitern die Zeichenfolge
, das ist, wie ich mit php entschlüsseln
$key = "f968f8e82961489a8b14b345";
$encrypted = base64_decode($crypt);
$n = mcrypt_module_open(MCRYPT_3DES, null, MCRYPT_MODE_ECB, null);
$fake_iv = str_repeat(chr(0), mcrypt_enc_get_iv_size($n));
mcrypt_generic_init($n, $key, $fake_iv);
$original = mdecrypt_generic($n, $encrypted);
, das ist, wo ich
Funktion für encrypt nennenNSString* str= @"test string with random words";
NSData* body =[str dataUsingEncoding:NSUTF8StringEncoding];
NSData *encrypt3DES = [ViewController TripleDES:body encryptOrDecrypt:kCCEncrypt key:@"f968f8e82961489a8b14b345"];
NSData *encryptBase64 = [GTMBase64 encodeData:encrypt3DES];
, die, wie ich in ios verschlüsseln ist
+ (NSData*)TripleDES:(NSData*)plainData encryptOrDecrypt:(CCOperation)encryptOrDecrypt key:(NSString*)key {
const void *vplainText;
size_t plainTextBufferSize;
plainTextBufferSize = [plainData length];
vplainText = (const void *)[plainData bytes];
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
// uint8_t ivkCCBlockSize3DES;
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc(bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
// memset((void *) iv, 0x0, (size_t) sizeof(iv));
// NSString *key = @"123456789";
NSString *initVec = @"init Vec";
const void *vkey = (const void *) [key UTF8String];
const void *vinitVec = (const void *) [initVec UTF8String];
ccStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithm3DES,
(kCCOptionPKCS7Padding | kCCOptionECBMode),
vkey, //"123456789", //key
kCCKeySize3DES,
vinitVec, //"init Vec", //iv,
vplainText, //"Your Name", //plainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
/* if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
else if (ccStatus == kCCParamError) NSLog(@"PARAM ERROR");
else if (ccStatus == kCCBufferTooSmall) NSLog(@"BUFFER TOO SMALL");
else if (ccStatus == kCCMemoryFailure) NSLog(@"MEMORY FAILURE");
else if (ccStatus == kCCAlignmentError) NSLog(@"ALIGNMENT");
else if (ccStatus == kCCDecodeError) NSLog(@"DECODE ERROR");
else if (ccStatus == kCCUnimplemented) NSLog(@"UNIMPLEMENTED");
*/
NSData *result = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
return result;
}
weitere Infos
, dass der Ausgang i Entschlüsselung erhalten mit PHP ist (am Ende der Zeichenfolge stange Quadrat Zeichen es hinzufügen)
test string with random words
das ist, was ich obtaine
test string with random words
will, dass der Base64-Code erzeugt von NSString *base64tring = [[NSString alloc] initWithData:encryptBase64 encoding:NSUTF8StringEncoding];
JuelOxhG5rmLZ32/HNQjxqSPGovPv+lupUz/u0/ryXU=
verwenden, können Sie beispielsweise Ausgang geben? String vor Verschlüsselung + Encryption-Ergebnis (in Base64-Encoding) + Schlüssel verwendet zum Beispiel + php entschlüsselte Ausgabe. die Ausgabe von PHP fehlt – Kaii
hinzugefügt die info der Schlüssel ist der gleiche von PHP $ key = "f968f8e82961489a8b14b345"; – oscurodrago