当前位置: 首页 > news >正文

网站模板 安装备案 新增网站

网站模板 安装,备案 新增网站,制作网站软件哪个好,台州百度关键词排名文章目录 一、openssl中随机数函数**OpenSSL 随机数函数概览**1. **核心随机数函数** **常用函数详解**1. RAND_bytes2. RAND_priv_bytes3. RAND_seed 和 RAND_add4. RAND_status **随机数生成器的熵池****常见用例****注意事项** 二、使用哈希算法生成随机的密钥 一、openssl中… 文章目录 一、openssl中随机数函数**OpenSSL 随机数函数概览**1. **核心随机数函数** **常用函数详解**1. RAND_bytes2. RAND_priv_bytes3. RAND_seed 和 RAND_add4. RAND_status **随机数生成器的熵池****常见用例****注意事项** 二、使用哈希算法生成随机的密钥 一、openssl中随机数函数 OpenSSL 提供了一套功能强大的随机数生成函数用于生成高质量的伪随机数。随机数在密码学中至关重要广泛用于密钥生成、盐值生成、初始化向量 (IV) 等安全操作。 OpenSSL 随机数函数概览 1. 核心随机数函数 函数名称描述RAND_bytes生成高质量的伪随机字节。RAND_priv_bytes生成高质量伪随机字节推荐用于对安全性要求更高的密钥生成。RAND_pseudo_bytes生成伪随机字节不保证是加密级别安全已被弃用。RAND_seed手动为伪随机数生成器添加种子值。RAND_add添加额外的熵种子数据到伪随机数生成器的池中。RAND_status检查随机数生成器是否被正确初始化。RAND_poll自动收集熵以初始化随机数生成器由内部调用。 常用函数详解 1. RAND_bytes 作用生成高质量的加密级别伪随机字节。 函数原型 int RAND_bytes(unsigned char *buf, int num);buf指向用于存储随机字节的缓冲区。num要生成的随机字节数。返回值 成功返回 1。如果随机数生成器未正确初始化返回 0。 示例 unsigned char random_bytes[16]; if (RAND_bytes(random_bytes, sizeof(random_bytes)) 1) {printf(生成的随机数);for (int i 0; i sizeof(random_bytes); i) {printf(%02x, random_bytes[i]);}printf(\n); } else {fprintf(stderr, 随机数生成失败\n); }2. RAND_priv_bytes 作用与 RAND_bytes 类似但专为高安全性应用设计如密钥生成。可能在实现中增加额外的保护。函数原型int RAND_priv_bytes(unsigned char *buf, int num);使用方法与 RAND_bytes 一致。 3. RAND_seed 和 RAND_add 作用为随机数生成器添加种子值或熵增强其随机性。 OpenSSL 的随机数生成器依赖熵池通常会自动初始化但可以通过这些函数手动添加种子数据。 函数原型 void RAND_seed(const void *buf, int num); void RAND_add(const void *buf, int num, double entropy);buf种子数据。num种子数据的字节数。entropy种子中估计的熵单位是比特范围 0 到 8*num。 示例 unsigned char seed_data[] {0x12, 0x34, 0x56, 0x78}; RAND_seed(seed_data, sizeof(seed_data));4. RAND_status 作用检查随机数生成器是否被正确初始化。 函数原型 int RAND_status(void);返回值 如果熵池已初始化且可用随机性足够返回 1。否则返回 0。 示例 if (RAND_status() 1) {printf(随机数生成器已初始化\n); } else {printf(随机数生成器未初始化\n); }随机数生成器的熵池 OpenSSL 的随机数生成器使用熵池作为随机性的来源依赖于系统提供的随机性如 /dev/random 或 /dev/urandom。在大多数情况下OpenSSL 会自动处理熵池的初始化但开发者可以通过 RAND_seed 或 RAND_add 提供额外的种子数据。 常见用例 生成随机密钥 unsigned char key[32]; // 256 位密钥 if (RAND_bytes(key, sizeof(key)) 1) {printf(密钥生成成功\n); }生成随机初始化向量 (IV) unsigned char iv[16]; // 128 位 IV if (RAND_bytes(iv, sizeof(iv)) 1) {printf(IV 生成成功\n); }增强随机数生成器熵 unsigned char extra_entropy[] {0xde, 0xad, 0xbe, 0xef}; RAND_add(extra_entropy, sizeof(extra_entropy), 4.0); // 添加 4 比特熵注意事项 使用 RAND_bytes 或 RAND_priv_bytes 推荐使用这两个函数生成随机数因为它们提供加密级别的安全性。不建议使用 RAND_pseudo_bytes因为它已被弃用。 熵的重要性 高质量的熵是随机数生成的核心。如果熵不足生成的随机数可能会被预测降低安全性。 平台依赖 OpenSSL 的随机数生成器在不同平台上依赖系统的熵源例如 /dev/urandom 或 Windows 的 CryptGenRandom。 OpenSSL 的随机数生成函数设计灵活满足了从简单随机需求到高安全性应用的各种场景。如果需要更高安全性的随机数生成推荐使用 RAND_priv_bytes。 二、使用哈希算法生成随机的密钥 #include stdio.h #include stdlib.h #include string.h #include openssl/rand.h #include openssl/evp.h#define SEED_LENGTH 32 // 随机种子长度32 字节 256 位 #define KEY_LENGTH 32 // 密钥长度32 字节 256 位// 使用随机种子和哈希算法生成密钥 void generate_hashed_key(unsigned char *key, size_t key_length) {unsigned char seed[SEED_LENGTH]; // 随机种子// 生成随机种子if (!RAND_bytes(seed, sizeof(seed))) {fprintf(stderr, 随机种子生成失败\n);exit(EXIT_FAILURE);}// 打印随机种子调试用printf(随机种子: );for (size_t i 0; i sizeof(seed); i) {printf(%02x, seed[i]);}printf(\n);// 使用 SHA-256 哈希函数对种子进行散列EVP_MD_CTX *mdctx EVP_MD_CTX_new(); // 创建哈希上下文if (!mdctx) {fprintf(stderr, 创建哈希上下文失败\n);exit(EXIT_FAILURE);}// 初始化哈希计算使用 SHA-256if (EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL) ! 1) {fprintf(stderr, 哈希初始化失败\n);EVP_MD_CTX_free(mdctx);exit(EXIT_FAILURE);}// 提供数据进行哈希计算if (EVP_DigestUpdate(mdctx, seed, sizeof(seed)) ! 1) {fprintf(stderr, 哈希更新失败\n);EVP_MD_CTX_free(mdctx);exit(EXIT_FAILURE);}// 获取哈希结果unsigned char hash[EVP_MAX_MD_SIZE];unsigned int hash_len;if (EVP_DigestFinal_ex(mdctx, hash, hash_len) ! 1) {fprintf(stderr, 哈希计算失败\n);EVP_MD_CTX_free(mdctx);exit(EXIT_FAILURE);}// 释放哈希上下文EVP_MD_CTX_free(mdctx);// 取哈希结果的前 key_length 字节作为密钥if (key_length hash_len) {fprintf(stderr, 密钥长度超出哈希值长度\n);exit(EXIT_FAILURE);}memcpy(key, hash, key_length);// 打印生成的密钥调试用printf(生成的密钥: );for (size_t i 0; i key_length; i) {printf(%02x, key[i]);}printf(\n); }int main() {unsigned char key[KEY_LENGTH]; // 存储生成的密钥// 调用密钥生成函数generate_hashed_key(key, KEY_LENGTH);return 0; } 运行两次的结果 这里可以看到每次运行后生成的密钥都是不一样的这样就保证了密钥的不一致性。
http://www.dnsts.com.cn/news/90744.html

相关文章:

  • 网站外包要花多少钱找人做个网站多少钱
  • 买空间送网站做一门户网站价格
  • 网站设计 电子购物网站设计北京猎梦网站建设
  • wap网站服务器深圳专业网络营销外包公司
  • 网站制作公司收费情况建筑模板工厂价格尺寸
  • 建设网站详细流程闵行区企业服务平台
  • 服务器建立网站外贸搜索引擎
  • 网站上的图片一般多大外贸网站怎么做效果好
  • 网站建设工作室小俊哥jsp网站开发实例教程
  • 做视频在哪个网站收益高电子商务平台内的自然人经营者
  • 怎样做单页微信网站连接龙海建设局网站
  • 招商网站建设地点公司网站网址注册和备案哪里找
  • 海淘网站铜官山区建设局网站
  • 成都网站编辑wordpress 下载页面
  • 网站上传文件不存在自媒体平台运营
  • 做电影资源网站有哪些内容wordpress插件安装教程
  • 针织衫技术支持东莞网站建设生活中花钱请人做网站
  • 做网站需要看那几点牛搬家网企业网站排名
  • 网站如何识别移动端企业网站推广怎么做
  • 建设中小企业网站wordpress响应式播放器
  • 金华网站建设优化技术温州外经贸局网站
  • 合肥网站建设过程网站由哪几个部分组成
  • 宁波制作网站企业wordpress 分页样式
  • 做冻品海鲜比较大的网站有哪些0元开网店无货源
  • 网站不用了怎么办教师个人网站建设
  • dedecms做网站网站推广优化业务
  • 大型网站建设技巧个人建站怎么做网站好
  • 建站公司学习石家庄网站建设成功案例
  • 网站内页做友链有没有专门做建材的网站
  • 网站建设俄语网站开发现在什么软件好