gpt4 book ai didi

ios - aes解密\0个字符ios

转载 作者:行者123 更新时间:2023-11-29 04:07:48 24 4
gpt4 key购买 nike

我有一个问题..当我解密从我的 php 页面返回的数据时,如果字符串的长度小于16,则将字符\0追加到字符串后。原始字符串为:100000065912248我用这个函数解密加密的字符串:

#define FBENCRYPT_ALGORITHM     kCCAlgorithmAES128
#define FBENCRYPT_BLOCK_SIZE kCCBlockSizeAES128
#define FBENCRYPT_KEY_SIZE kCCKeySizeAES256

+ (NSData*)decryptData:(NSData*)data key:(NSData*)key iv:(NSData*)iv;
{
NSData* result = nil;

// setup key
unsigned char cKey[FBENCRYPT_KEY_SIZE];
bzero(cKey, sizeof(cKey));
[key getBytes:cKey length:FBENCRYPT_KEY_SIZE];

// setup iv
char cIv[FBENCRYPT_BLOCK_SIZE];
bzero(cIv, FBENCRYPT_BLOCK_SIZE);
if (iv) {
[iv getBytes:cIv length:FBENCRYPT_BLOCK_SIZE];
}

// setup output buffer
size_t bufferSize = [data length] + FBENCRYPT_BLOCK_SIZE;
void *buffer = malloc(bufferSize);

int length = [data length];

// do decrypt
size_t decryptedSize = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
FBENCRYPT_ALGORITHM,
0,
cKey,
FBENCRYPT_KEY_SIZE,
cIv,
[data bytes],
[data length],
buffer,
bufferSize,
&decryptedSize);

if (cryptStatus == kCCSuccess) {
result = [NSData dataWithBytesNoCopy:buffer length:decryptedSize];
} else {
free(buffer);
NSLog(@"[ERROR] failed to decrypt| CCCryptoStatus: %d", cryptStatus);
}

return result;
}

我向函数发送了一个零“iv”参数,并且在函数中使用“cIv”之后,它包含以下内容: cIv description

结果是正确的,但是字符串的长度是16而不是15(字符串:100000065912248)。事实上,最后一个字符是\0。

为什么?我该如何解决?

编辑:

PHP加密函数:

function encrypt($plaintext) {

$key = 'a16byteslongkey!a16byteslongkey!';

$base64encoded_ciphertext = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_CBC));
$base64encoded_ciphertext = trim($base64encoded_ciphertext);

return $base64encoded_ciphertext;
}

最佳答案

AES 是一种 block 密码,可加密/解密长度为 128 位(16 字节)的 block 。因此,如果数据不是 block 大小,则必须添加一些填充。最流行且受 Apple 支持的是 PKCS7。

与 PHP 交互必须考虑填充和可能的 base64 编码。

解决方案是在 PHP 和 iOS 两侧使用相同的填充。

AES 总是在 16 字节上运行,没有选择——所以,如果你有 15 字节,则必须添加一个字节,即填充。据我了解(关于PHP加密的不多)PHP并没有做真正的PCKS7padding,最好自己填充。在维基百科中查找 PKCS7。

关于ios - aes解密\0个字符ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925860/

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