gpt4 book ai didi

c - 从 C 语言文件中读取 64 字节 block

转载 作者:行者123 更新时间:2023-11-30 17:48:12 25 4
gpt4 key购买 nike

我似乎无法理解以 64 字节 block 读取,然后使用河豚的概念,

BF_cfb64_encrypt(source, dest, sizeof(source), &bf_key, iv, &enc, BF_DECRYPT) 

加密函数?它。我知道如何使用 BF 函数,但是从 4096 字节文件中读取 64 字节是我的困惑。任何提示或建议将不胜感激。我的理解是,1个字符是一个字节,所以这是否意味着我只是保留一个计数,当字符计数为8时,这意味着我已经读取了64个字节,因此加密,然后写入文件,并重复直到整个文件被解析?

最佳答案

首先,熟悉您的流密码可能是有必要的。 Blowfish 使用 64 位 block 大小进行加密/解密;不是字节。只要您了解您所指的 64“字节”是的要求,而不是 Blowfish,并且 Blowfish 仅需要 8 字节 block 。

也就是说,循环传递一个大小为算法 block 大小的倍数的文件,一次提取一个 64 字节帧的解密数据当然是可行的。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <openssl/blowfish.h>


int main(int argc, char *argv[])
{
if (argc < 2)
return EXIT_FAILURE;

FILE * fp = fopen(argv[1], "rb");
if (fp == NULL)
{
perror(argv[1]);
return EXIT_FAILURE;
}

// your key bytes would be here (obviously).
unsigned char key[16] = "1234567890123456";
int key_len = sizeof(key)-1;

// setup the key schedule.
BF_KEY bf_key;
BF_set_key(&bf_key, key_len, key);

// and setup the initialization vector. normally the IV is
// randomly generated when encrypting, then stored as the
// lead 8 bytes of ciphertext output. this assumes you're
// iv is static (all zeros) similar to SSH
unsigned char iv[8] = {0};
int n = 0;

// finally, begin reading the data in chunks of 64 bytes
// sending it through the blowfish algorithm
unsigned char source[64];
unsigned char dest[64];
while (fread(source, sizeof(source), 1, fp) == 1)
{
BF_cfb64_encrypt(source, dest, sizeof(dest), &bf_key, iv, &n, BF_DECRYPT);

// do something with your dest[] plaintext block
}
fclose(fp);

return 0;
}

该示例相当简单,但它提出了一些有关对称 block 算法和填充的内容,您可能没有考虑这些内容(或者您可能考虑过,而且它与这个问题无关)。

像 Blowfish 这样的对称 block 算法在 block 大小上运行。对于 Blowfish, block 大小为 64 位(8 字节)。这意味着加密/解密操作始终发生在 64 位大小的 block 中。如果您使用较低级别的 openssl api,则必须以不大于该值的 block 来加密(和解密)数据。更高级别的 API(例如 BF_cfb64_encrypt)旨在允许“流模式”,这意味着您可以以更大的 block 提交数据,只要它们的大小为 block 大小的倍数即可。 并且您将保留对 API 的连续连续调用之间的 ivn 值。

最后,我开始写这篇关于对称 block 算法和填充模式的相当长的谩骂,但意识到这并不适合这个问题,所以我只能建议你研究它们。我怀疑您在某个时候需要这样做。

关于c - 从 C 语言文件中读取 64 字节 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18686089/

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