gpt4 book ai didi

php - iOS 中的 3DES 加密结果与 php 不一样?

转载 作者:行者123 更新时间:2023-11-28 22:15:30 25 4
gpt4 key购买 nike

我尝试像下面的 php 代码一样加密 iOS 中的数据:

<?php
$plaintext = "test";
$key = "12345";
$data = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $plaintext, MCRYPT_MODE_ECB));
echo ($data);
?>

上面 php 代码的结果是 ZjMSIze/V+A=

我在 iOS 中使用以下代码进行数据加密:

- (NSData*)encrypt3DES:(NSData*)plainData 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 = @"123456789012345678901234";
NSString *initVec = @"init Vec";
const void *vkey = (const void *) [key UTF8String];
const void *vinitVec = (const void *) [initVec UTF8String];

ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
vkey, //"123456789012345678901234", //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 *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];

return myData;
}

NSData *encrpyData = [self encrypt3DES:[@"test" dataUsingEncoding:NSUTF8StringEncoding] key:@"12345"];
NSLog(@"%@", [encrpyData base64Encoding]);

iOS中数据加密的结果是ZjdeIS8NijE=,这和php不一样。

iOS加密函数应该如何返回与php相同的结果?

最佳答案

CCCode 调用中的 Obj-C 代码中,您对编译器撒谎并说您的 key 是 kCCKeySize3DES 字节长,即使它实际上只有 5 个字节。3DES 要求一个 24 字节的 key 。

所以发生的事情是它正在读取你的 key 的 5 个字节之后内存中的任何垃圾作为 key 的其余部分。谁知道那是什么,这就是加密结果不同的原因。

关于php - iOS 中的 3DES 加密结果与 php 不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com