openssl3.2 - exp - generate prime

2024-03-09 17:20
文章标签 prime generate exp openssl3.2

本文主要是介绍openssl3.2 - exp - generate prime,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • openssl3.2 - exp - generate prime
    • 概述
    • 笔记
    • END

openssl3.2 - exp - generate prime

概述

openssl3.2.命令行可以生成质数

openssl prime -generate -bits 256 -hex -safe

单步调试openssl.exe工程, 整理了一个函数, 用openssl API来产生质数.
openssl命令行是将结果打印到UI上, 我是要将大数结果放到buffer中.
查了openssl源码, 可以用BN_bn2binpad()来干这个活.

笔记

/*!
* \file main.cpp
* \note exp014_gen_prime
* openssl3.2 - exp - generate prime
* 用命令行产生质数 => openssl prime -generate -bits 256 -hex -safe
* openssl源码处理主函数 prime_main()
*/#include "my_openSSL_lib.h"
#include <openssl/crypto.h>
#include <openssl/bio.h>#include <openssl/bn.h>#include <stdlib.h>
#include <stdio.h>
#include <assert.h>#include "CMemHookRec.h"void my_openssl_app();
bool my_gen_prime(int bits, int safe, UCHAR*& pBuf, int&lenBuf);
bool bn_data_to_bio(BIGNUM* bn, BIO* bio);int main(int argc, char** argv)
{setvbuf(stdout, NULL, _IONBF, 0); // 清掉stdout缓存, 防止调用printf时阻塞mem_hook();my_openssl_app();mem_unhook();/*! run resultgenerate safe prime(256bits) below:0000 - d8 a6 2b e1 a9 c2 42 de-f4 e1 c9 36 c6 e9 8e 7e   ..+...B....6...~0010 - a3 ec 19 03 55 dd e8 f9-17 61 7c f2 03 d4 1a 6b   ....U....a|....kfree map, g_mem_hook_map.size() = 0*/return 0;
}void my_openssl_app()
{UCHAR* pBuf = NULL;int lenBuf = 0;bool b_rc = false;do {printf("generate safe prime(256bits) below:\n");b_rc = my_gen_prime(8 * 32, 1, pBuf, lenBuf);if (!b_rc){printf("err\n");break;}BIO_dump_fp(stdout, pBuf, lenBuf);} while (false);if (NULL != pBuf){OPENSSL_free(pBuf);pBuf = NULL;}
}bool my_gen_prime(int bits, int safe, UCHAR*& pBuf, int& lenBuf)
{BIGNUM* bn = NULL;int i_rc = 0;bool b_rc = false;do {bn = BN_new();if (NULL == bn){break;}i_rc = BN_generate_prime_ex(bn, bits, safe, NULL, NULL, NULL);if (1 != i_rc){break;}lenBuf = BN_num_bytes(bn);if (lenBuf <= 0){break;}pBuf = (UCHAR*)OPENSSL_zalloc(lenBuf);if (NULL == pBuf){break;}i_rc = BN_bn2binpad(bn, pBuf, lenBuf);if (lenBuf != i_rc){break;}b_rc = true;} while (false);if (NULL != bn){BN_free(bn);bn = NULL;}return b_rc;
}

END

这篇关于openssl3.2 - exp - generate prime的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/791378

相关文章

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

linux 内核提权总结(demo+exp分析) -- 任意读写(四)

hijack_modprobe_path篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     原理同hijack_prctl, 当用户执行错误格式的elf文件时内核调用call_usermod

linux 内核提权总结(demo+exp分析) -- 任意读写(三)

hijack_prctl篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   prctl函数: 用户态函数,可用于定制进程参数,非常适合和内核进行交互 用户态执行prctl函数后触发prctl系统

linux 内核提权总结(demo+exp分析) -- 任意读写(二)

hijack_vdso篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     vdso: 内核实现的一个动态库,存在于内核,然后映射到用户态空间,可由用户态直接调用 内核中的vdso如果被修改

linux 内核提权总结(demo+exp分析) -- 任意读写(一)

cred篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   每个线程在内核中都对应一个线程结构块thread_infothread_info中存在task_struct类型结构体 struct t

linux 内核提权总结(demo+exp分析) -- ROP(二)

ret2usr CR4篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   smep: smep是内核的一种保护措施, 使得内核不可执行用户态代码 内核通过CR4寄存器的第20位来控制smep,

linux 内核提权总结(demo+exp分析) -- ROP(一)

基础ROP篇(linux 5.0.21) 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   内核提权与用户态攻击的区别 攻击流程 用户态攻击: 执行 system("/bin/sh") 获得shel

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

HDU 1016 Prime Ring Problem (深搜)

OJ题目 : click here ~~ 大概题意:n个数,形成一个环,使得相邻两个数的和为素数。以1开始,按字典序输出序列。 很简单的深搜。 AC_CODE int n;int visit[22];int num[22];int len;bool Is_prime(int x){for(int i = 2;i*i <= x;i++)if(x%i == 0) return

【SGU】113. Nearly prime numbers 合数分解

传送门:【SGU】113. Nearly prime numbers 题目分析:O(sqrt(N))。。 代码如下: #include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std ;#define rep( i , a , b ) for