gpt4 book ai didi

iphone - 如何在 ECB 模式下使用 DES 加密 Objective C 中的 NSString?

转载 作者:行者123 更新时间:2023-12-03 20:21:32 25 4
gpt4 key购买 nike

我正在尝试在 iPhone 上用 Objective C 加密 NSString。至少当我编码“us=foo;pw=bar;pwAlg=false;”时,我不想得到像“TmsbDaNG64lI8wC6NLhXOGvfu2IjLGuEwc0CzoSHnrs=”这样的字符串通过使用此键:“testtest”。

我现在的问题是,CCCrypt 总是返回“4300 - 参数错误”,我不知道为什么。

这是我的代码(5小时谷歌和尝试错误的结果):

NSString *token = @"us=foo;pw=bar;pwAlg=false;";
NSString *key = @"testtest";

const void *vplainText;
size_t plainTextBufferSize;

plainTextBufferSize = [token length];
vplainText = (const void *) [token UTF8String];

CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t *movedBytes;

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

ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmDES,
kCCOptionECBMode,
vkey, //"123456789012345678901234", //key
kCCKeySizeDES,
NULL,// vinitVec, //"init Vec", //iv,
vplainText, //"Your Name", //plainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
movedBytes);

NSString *result;
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [myData base64Encoding];

最佳答案

ECB 模式下的 DES 加密使用 8 字节 block 大小,并对每个 block 单独进行编码。问题是您的输入字符串没有平均分为 8 个字节,并且加密器不知道如何处理最终的非 8 字节 block 。

修复方法是允许加密器通过将 kCCOptionPKCS7Padding 添加到 CCCrypt 的选项来填充最终 block 。例如(来自 NSData 加密类别的片段):

CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, 
kCCAlgorithmDES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr,
kCCKeySizeDES,
NULL,
[self bytes],
dataLength,
buffer,
bufferSize
&numBytesEncrypted);

看看这个 post有关填充算法的更多详细信息。希望这会有所帮助。

关于iphone - 如何在 ECB 模式下使用 DES 加密 Objective C 中的 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512184/

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