IOSで3DESの文字列を暗号化するコードを使用しています。これをphp で復号化しますが、kCCOptionPKCS7Paddingを使用すると文字列が長くなりますそれを使用しないでください) PHPで解読すると文字列に多かれ少なかれ文字が追加されます どうすれば修正できますか?私はPHP3DES暗号化に関する問題
$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);
で解読どのように私は、暗号化
NSString* 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];
のための関数を呼び出す。ここで、iは、IOS
+ (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;
}
詳細に暗号化する方法であるということである
Base64でコードが生成され、私が欲しいものobtaine
test string with random words
である私は、PHPで解読ます出力(文字列の末尾に、それはスタンジェの正方形の文字を追加)
test string with random words
ある210
NSString *base64tring = [[NSString alloc] initWithData:encryptBase64 encoding:NSUTF8StringEncoding];
JuelOxhG5rmLZ32/HNQjxqSPGovPv+lupUz/u0/ryXU=
の出力を与えることができますか?暗号化前の文字列+暗号化結果(ベース64エンコーディング)+例えば、+ phpで復号化された出力。 PHPの出力には、 – Kaii
が追加されています。キーはphp $ key = "f968f8e82961489a8b14b345"と同じです。 – oscurodrago