gpt4 book ai didi

iOS RSA 解密成功但解密数据似乎已损坏

转载 作者:行者123 更新时间:2023-11-28 19:29:31 26 4
gpt4 key购买 nike

我需要实现的加密算法需要RSA加密一个triple des key。但是,我遇到了以下行为:

  1. 三重 Des 的创建没有任何问题。
  2. SecKeyGeneratePair用于生成 RSA 公钥和私钥。
  3. 三重 Des key K1 和 K2 值使用生成的公钥加密。
  4. 然后我使用 RSA 私钥解密上面创建的数据 block 。
  5. 解密成功!但是,K1 和 K2 值似乎已损坏。

下面是用于加密 K1 和 K2 数据的代码:

- (NSData *)performRsaEncryptionOnData:(NSData *)message {
size_t cipherBufferSize = SecKeyGetBlockSize(publicKey);
size_t plainBufferSize = [message length];
uint8_t *plainBuffer = (uint8_t *)calloc(plainBufferSize, sizeof(uint8_t));
uint8_t *cipherBuffer = (uint8_t *)calloc(cipherBufferSize, sizeof(uint8_t));
strncpy( (char *)plainBuffer,[message bytes], plainBufferSize);
SecKeyEncrypt(publicKey, kSecPaddingPKCS1, plainBuffer, plainBufferSize, &cipherBuffer[0], &cipherBufferSize);
return [NSData dataWithBytesNoCopy:cipherBuffer length:cipherBufferSize];
}

这是用于解密数据的代码:

- (NSData *)performRsaDecryptionForDataBlob:(NSData *)encryptedData {
size_t plainTextBufferSize = 128;
size_t cipherBufferSize = [encryptedData length];
uint8_t *cipherBuffer = (uint8_t*)[encryptedData bytes];
uint8_t *plainBuffer = (uint8_t *)calloc(plainTextBufferSize, sizeof(uint8_t));
SecKeyDecrypt(privateKey, kSecPaddingPKCS1,cipherBuffer,cipherBufferSize,&plainBuffer[0],&plainTextBufferSize);
return [NSData dataWithBytesNoCopy:plainBuffer length:plainTextBufferSize];
}

这是我在 RSA 加密之前得到的结果:K1K2 = <54b86c29 f9766b00 d90a6c51 1a80026a> ,解密后这是我们所拥有的:K1K2 = <54b86c29 f9766b00 00000000 00000000> .坦率地说,我不完全确定为什么会这样。有什么想法吗?

最佳答案

strncpy(..) 不适用于二进制数据。您的 key 包含 0 并且 strncpy(..) 停止复制 key 的其余部分。

K1K2 = <54b86c29 f9766b00 d90a6c51 1a80026a>
^^

关于iOS RSA 解密成功但解密数据似乎已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47219823/

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