gpt4 book ai didi

ios - iOS中的三重DES解密

转载 作者:可可西里 更新时间:2023-11-01 03:31:32 24 4
gpt4 key购买 nike

我目前在 iOS 上使用以下方法进行三重 DES 解密:

    NSString* plainText = @"My Text";
NSString* keyText = @"cf6f1ed3bf0a156e";

NSData *plainData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
NSData *keyData = [keyText dataUsingEncoding:NSUTF8StringEncoding];

size_t bufferSize = plainData.length + kCCBlockSize3DES;
NSMutableData *cypherData = [NSMutableData dataWithLength:bufferSize];
size_t movedBytes = 0;

CCCryptorStatus ccStatus;
ccStatus = CCCrypt(kCCDecrypt,
kCCAlgorithm3DES,
kCCOptionECBMode,
keyData.bytes,
kCCBlockSize3DES,
NULL,
plainData.bytes,
plainData.length,
cypherData.mutableBytes,
cypherData.length,
&movedBytes);

cypherData.length = movedBytes;

if( ccStatus == kCCSuccess ) {
NSLog(@"Data: %@",cypherData);
NSLog(@"Data encoded string: %@",[NSString stringWithUTF8String:[cypherData bytes]]);
NSLog(@"Data encoded: %@",[[NSString alloc] initWithData:cypherData encoding:NSUTF8StringEncoding]);
} else {
NSLog(@"Failed DES decrypt ...");
return nil;
}

但是,我不断在控制台中收到以下信息:

Data: Data encoded string:(null) Data encoded: (null)

关于为什么会发生这种情况的任何想法?任何人都可以看到此代码可能存在的问题吗?

最佳答案

您的 key 长 16 个字节。 3DES 采用一个 24 字节长的 key (感谢 Zaph 的更正;还注意到您只读取了其中的 8 个字节)。这可能不会导致此错误,但意味着 key 不是您认为的那样。

字符串中的一系列十六进制数字只是 UTF-8 值。 “00”不是 0x00,0x00。是 0x30, 0x30。

你在这里得到 (null) 的原因是:

NSLog(@"Data encoded string: %@",[NSString stringWithUTF8String:[cypherData bytes]]);

加密输出不太可能是合法的 UTF-8 字符串。如果要将随机数据编码为字符串,则需要像十六进制编码或 Base64 编码这样的编码。 Base64 是内置的,您可以使用 [NSData base64EncodedStringWithOptions:] 对其进行编码。

关于ios - iOS中的三重DES解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41228694/

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