You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何生成含10000个16字节随机密钥的key.bin并读取存储到RAM

C++ 密钥文件生成与读取实现

前置说明

所有实现基于C++11及以上标准库,无需引入第三方依赖,代码兼容Windows、Linux、macOS平台。

1. 生成key.bin文件

实现逻辑

总共需要生成10000个16字节密钥,总文件大小固定为10000 * 16 = 160000 Byte。使用标准库随机数组件生成随机值,二进制模式写入文件避免内容转义。

核心代码片段

#include <fstream>
#include <array>
#include <random>
#include <stdexcept>

void generate_key_file(const std::string& file_path = "key.bin") {
    // 二进制截断模式打开文件
    std::ofstream ofs(file_path, std::ios::binary | std::ios::trunc);
    if (!ofs.is_open()) {
        throw std::runtime_error("无法打开文件用于写入");
    }

    // 初始化随机数生成器,加密场景下优先使用该安全随机源
    std::random_device rd;
    std::uniform_int_distribution<uint8_t> dist(0, 255);

    // 逐个生成16字节密钥写入文件
    for (size_t i = 0; i < 10000; ++i) {
        std::array<uint8_t, 16> key;
        for (size_t j = 0; j < 16; ++j) {
            key[j] = dist(rd);
        }
        ofs.write(reinterpret_cast<const char*>(key.data()), key.size());
    }

    ofs.close();
}

2. 读取key.bin内容到内存

实现逻辑

用std::vector<std::array<uint8_t, 16>>存储所有密钥,既保证内存连续,也可以通过下标直接访问单个密钥。读取前先校验文件大小是否符合预期,避免读入损坏的文件。

核心代码片段

#include <vector>
#include <filesystem> // C++17及以上可用,用于获取文件大小,低版本可以自行替换为文件流seekg计算

std::vector<std::array<uint8_t, 16>> load_key_file(const std::string& file_path = "key.bin") {
    // 校验文件大小是否符合预期
    const size_t expected_size = 10000 * 16;
    if (std::filesystem::file_size(file_path) != expected_size) {
        throw std::runtime_error("密钥文件大小异常,可能已损坏");
    }

    // 二进制只读模式打开文件
    std::ifstream ifs(file_path, std::ios::binary);
    if (!ifs.is_open()) {
        throw std::runtime_error("无法打开文件用于读取");
    }

    // 预分配内存空间,避免多次扩容
    std::vector<std::array<uint8_t, 16>> keys(10000);
    for (auto& key : keys) {
        ifs.read(reinterpret_cast<char*>(key.data()), key.size());
    }

    ifs.close();
    return keys;
}

完整调用示例

#include <iostream>

int main() {
    try {
        // 生成密钥文件
        generate_key_file();
        std::cout << "密钥文件生成成功" << std::endl;

        // 读取密钥到内存
        auto keys = load_key_file();
        std::cout << "密钥读取完成,共加载" << keys.size() << "个密钥" << std::endl;

        // 测试打印第一个密钥的前4个字节,验证正确性
        std::cout << "第一个密钥前4字节: ";
        for (size_t i = 0; i < 4; ++i) {
            printf("%02X ", keys[0][i]);
        }
        std::cout << std::endl;
    } catch (const std::exception& e) {
        std::cerr << "运行错误: " << e.what() << std::endl;
        return 1;
    }
    return 0;
}

注意事项

  • 所有文件操作必须加std::ios::binary标志,Windows平台下不加该标志会自动转换换行符,导致文件内容与预期不符
  • 如果是加密场景使用,禁止用rand()函数生成随机数,安全等级不足,必须使用密码学安全的随机源
  • 如果你的编译器不支持C++17的std::filesystem,可以把文件大小校验逻辑替换为:打开文件后用ifs.seekg(0, std::ios::end); size_t file_size = ifs.tellg(); ifs.seekg(0, std::ios::beg);计算

内容的提问来源于stack exchange,提问作者seeker1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:27:03