c++如何使用openssl接口來(lái)生成隨機(jī)數(shù)
c++使用openssl接口來(lái)生成隨機(jī)數(shù)
openssl是一個(gè)用來(lái)進(jìn)行加密和解密的常用接口
里面也有產(chǎn)生隨機(jī)數(shù)的功能,接下來(lái)就來(lái)實(shí)現(xiàn)一下該功能
產(chǎn)生隨機(jī)數(shù)的代碼十分容易
但配置過(guò)程十分繁瑣,配置過(guò)程是后面實(shí)現(xiàn)openssl進(jìn)行加密和解密操作的必不可少的一步
首先應(yīng)該下載openssl的資源文件,包含include,bin和lib三個(gè)文件夾,下載之后,在該三個(gè)文件夾的同等目錄下創(chuàng)建src文件,在src文件中就可以創(chuàng)建vs項(xiàng)目了,我是使用的vs2019。
如下圖所示:
在該位置創(chuàng)建項(xiàng)目:
創(chuàng)建新項(xiàng)目完成后,寫(xiě)出下來(lái)下面的代碼是完全沒(méi)有問(wèn)題的
但是在包含openssl的rand庫(kù)文件時(shí)將會(huì)發(fā)生錯(cuò)誤,提示未能包含進(jìn)來(lái)
這時(shí)候需要在屬性頁(yè)將附加包含目錄加進(jìn)來(lái),加進(jìn)來(lái)之后就不會(huì)報(bào)錯(cuò)了
我們來(lái)看一下這個(gè)庫(kù)文件所在的位置:發(fā)現(xiàn)是在文件夾include里面,
而當(dāng)前代碼所在的文件夾如下:
所以要…\先去到src文件夾,再…\去到include文件所在的文件夾,然后再include就可以進(jìn)入到include文件夾中了,即…\include
將其加進(jìn)來(lái),并且確定,這樣以來(lái),文件夾include里面的所有庫(kù)函數(shù)都可以使用了
報(bào)錯(cuò)消失
接下來(lái)就可以使用openssl中產(chǎn)生隨機(jī)數(shù)的庫(kù)函數(shù)了
unsigned char buf[16] = { 0 };//用來(lái)接收產(chǎn)生的隨機(jī)數(shù) int re = RAND_bytes(buf, sizeof(buf));
在這里我們使用
RAND_bytes(unsigned char* buf,int num)
函數(shù)來(lái)產(chǎn)生隨機(jī)數(shù),第一個(gè)參數(shù)用來(lái)接收產(chǎn)生的隨機(jī)數(shù),第二個(gè)參數(shù)是產(chǎn)生的隨機(jī)數(shù)的數(shù)量,返回值是0或1,是1則表示產(chǎn)生隨機(jī)數(shù)成功。
寫(xiě)好代碼之后運(yùn)行發(fā)現(xiàn)報(bào)錯(cuò):說(shuō)剛才使用的函數(shù)不可用,現(xiàn)在想起來(lái)還有另外兩個(gè)文件夾未使用
在屬性中將將附加庫(kù)目錄和附加依賴項(xiàng)加進(jìn)來(lái)
再次運(yùn)行后還是報(bào)錯(cuò),提示信息如下:
由于缺少上述文件,我們?nèi)フ乙幌略撐募l(fā)現(xiàn)在bin文件夾的x86里面(lib文件夾里面是庫(kù)文件,bin文件夾里面是可執(zhí)行的二進(jìn)制文件)
然后在屬性里面將輸出目錄和工作目錄修改一下即可:
再次運(yùn)行,運(yùn)行成功,產(chǎn)生16個(gè)隨機(jī)數(shù)
總體代碼很少,如下所示:
#include<iostream> #include<openssl/rand.h> using namespace std; int main(int argc, char* argv[]) { unsigned char buf[16] = { 0 };//用來(lái)接收產(chǎn)生的隨機(jī)數(shù) int re = RAND_bytes(buf, sizeof(buf)); for (int i = 0;i < sizeof(buf);i++) cout << (int)buf[i] << " "; cout << endl; getchar(); return 0; }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++設(shè)計(jì)模式之建造者模式(Builder)
這篇文章主要介紹了C++設(shè)計(jì)模式之建造者模式Builder的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03c語(yǔ)言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟(比較簡(jiǎn)單)
這篇文章主要介紹了c語(yǔ)言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟(比較簡(jiǎn)單),需要的朋友可以參考下2014-01-01c++連接mysql數(shù)據(jù)庫(kù)的兩種方法(ADO連接和mysql api連接)
現(xiàn)在正做一個(gè)接口,通過(guò)不同的連接字符串操作不同的數(shù)據(jù)庫(kù)。要用到mysql數(shù)據(jù)庫(kù),C++連接mysql有2種方法:利用ADO連接、利用mysql自己的api函數(shù)進(jìn)行連接,下面看看如何用吧2013-12-12C++string底層框架模擬實(shí)現(xiàn)代碼
本節(jié)文章主要說(shuō)明淺拷貝和深拷貝的優(yōu)缺點(diǎn),以及仿寫(xiě)string類(lèi)的邏輯并分析實(shí)現(xiàn)過(guò)程,對(duì)C++string底層框架模擬實(shí)現(xiàn)代碼感興趣的朋友一起看看吧2021-11-11C語(yǔ)言如何計(jì)算兩個(gè)數(shù)的最小公倍數(shù)
這篇文章主要介紹了C語(yǔ)言如何計(jì)算兩個(gè)數(shù)的最小公倍數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C++前綴樹(shù)字典樹(shù)的學(xué)習(xí)與模擬實(shí)現(xiàn)代碼示例
這篇文章主要介紹了C++前綴樹(shù)字典樹(shù)的學(xué)習(xí)與模擬實(shí)現(xiàn)代碼示例,Trie又被稱(chēng)為前綴樹(shù)、字典樹(shù),所以當(dāng)然是一棵樹(shù),上面這棵Trie樹(shù)包含的字符串集合是{in,inn,int,tea,ten,to},每個(gè)節(jié)點(diǎn)的編號(hào)是我們?yōu)榱嗣枋龇奖慵由先サ?需要的朋友可以參考下2023-07-07Qt基礎(chǔ)開(kāi)發(fā)之QString與QByteArray詳細(xì)用法與區(qū)別及QString QByteArray互轉(zhuǎn)
這篇文章主要介紹了Qt基礎(chǔ)開(kāi)發(fā)之QString與QByteArray詳細(xì)用法與區(qū)別及QString QByteArray互轉(zhuǎn),需要的朋友可以參考下2020-03-03舉例講解C語(yǔ)言程序中對(duì)二叉樹(shù)數(shù)據(jù)結(jié)構(gòu)的各種遍歷方式
這篇文章主要介紹了舉例講解C語(yǔ)言程序中對(duì)二叉樹(shù)數(shù)據(jù)結(jié)構(gòu)的各種遍歷方式,先序中序后序二叉樹(shù)遍歷幾乎成了最老生常談的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識(shí),的朋友可以參考下2016-04-04