国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

openssl3.2 - 檢查rsa證書和私鑰是否匹配(快速手搓一個(gè)工具)

這篇具有很好參考價(jià)值的文章主要介紹了openssl3.2 - 檢查rsa證書和私鑰是否匹配(快速手搓一個(gè)工具)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

openssl3.2 - 檢查rsa證書和私鑰是否匹配(快速手搓一個(gè)工具)

概述

在學(xué)習(xí)openssl官方的/test/certs的腳本實(shí)現(xiàn), 做到第30個(gè)腳本實(shí)驗(yàn)時(shí), 發(fā)現(xiàn)根CA證書和key不匹配.
估計(jì)做實(shí)驗(yàn)時(shí), 遇到腳本需要的文件, 就隨便拷貝一個(gè)同名的文件過(guò)來(lái), 導(dǎo)致證書和key不是一個(gè)腳本產(chǎn)生的, 所以不匹配

就想從前面的實(shí)驗(yàn)中, 找出匹配的證書和key來(lái)做實(shí)驗(yàn), 肯定有啊.

這事應(yīng)該openssl編程就能做到. 不過(guò)時(shí)間緊, 先不用openssl編程來(lái)做.
看有沒(méi)有簡(jiǎn)單暴力的方法.

在網(wǎng)上找到如下2個(gè)openssl命令, 可以輸出證書和key的模塊信息.

// 打印X509證書的模塊信息
openssl x509 -inform PEM -modulus -in ca-cert.pem -noout

// 打印rsa私鑰的模塊信息
openssl rsa -inform PEM -modulus -in ca-key.pem -noout

這2個(gè)命令輸出的都是文本信息, 如果這2個(gè)文本信息相同, 則說(shuō)明這2個(gè)證書和私鑰是匹配的
按照這個(gè)原理, 手工輸入命令, 然后人肉比對(duì). 原始操作就是這樣的, 就可以知道一對(duì)證書和key是否匹配.

可以重定向?yàn)槲募?e.g. openssl x509 -inform PEM -modulus -in ca-cert.pem -noout > cert_info.txt)

然后用win10自帶的FC.exe 就可以比較2個(gè)文件是否相同(e.g. fc file_a file_b), 如果fc返回0, 這2個(gè)文件就是相同的.

但是作為研發(fā), 能用程序做的, 絕對(duì)不可能用人工操作來(lái)折磨自己, 那肯定不能夠啊.

用了一個(gè)小時(shí), 手搓了一個(gè)原始工具來(lái)干活.

效果

openssl3.2 - 檢查rsa證書和私鑰是否匹配(快速手搓一個(gè)工具),openSSL,openSSL

筆記

編程環(huán)境

vs2019 vc++ MFC + Dialog模板

界面控件的設(shè)置

對(duì)話框設(shè)置為可以接收文件.
2個(gè)編輯框(證書和key), 也設(shè)置為可以接收文件.

增加文件拖拽的類

從CEdit繼承一個(gè)類CDropEdit(用類向?qū)Ш芊奖?, 加入拖拽消息處理(用類向?qū)Ъ尤胂⑻幚?, 框架代碼不用自己寫.

#pragma once
#include <afxwin.h>
class CDropEdit :
    public CEdit
{
public:
    DECLARE_MESSAGE_MAP()
    afx_msg void OnDropFiles(HDROP hDropInfo);
};


#include "pch.h"
#include "CDropEdit.h"
BEGIN_MESSAGE_MAP(CDropEdit, CEdit)
	ON_WM_DROPFILES()
END_MESSAGE_MAP()


void CDropEdit::OnDropFiles(HDROP hDropInfo)
{
	// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值

	// 拖拽實(shí)現(xiàn)很多, 可以參考msdn, 我就直接用下面這位同學(xué)分享的片段
	// https://blog.csdn.net/wrl112/article/details/120335725
	
    TCHAR szTmp[MAX_PATH * 2];
    CString strVal;
    unsigned int nRet = 0, nInx = 0;

    do {
        nRet = ::DragQueryFile(hDropInfo, nInx++, szTmp, sizeof(szTmp));
        if (nRet > 0) {
            strVal += szTmp;
        }
        else {
        }
        break;
    } while (1);
    ::DragFinish(hDropInfo);
    SetWindowText(strVal);

	CEdit::OnDropFiles(hDropInfo);
}

RSA證書和key是否匹配的實(shí)現(xiàn)

#include <string>

std::string my_W2A(std::wstring str)
{
	USES_CONVERSION;
	std::string str_rc = W2A(str.c_str());
	return str_rc;
}

void CCertKeyMatchDlg::OnBnClickedButtonMatch()
{
	// TODO: 在此添加控件通知處理程序代碼
	CString csFileA;
	CString csFileB;
	CString csTmp;

	std::string strFileA;
	std::string strFileB;

	char szBuf[10 * 1024];

	int i_rc = 0;

	do {
		this->SetWindowTextW(_T(""));

		m_EditFileA.GetWindowText(csFileA);
		m_EditFileB.GetWindowText(csFileB);

		if ((csFileA.GetLength() <= 0) || (csFileB.GetLength() <= 0))
		{
			TRACE(_T("文件名必須都不為空"));
			break;
		}

		strFileA = my_W2A((LPCWSTR)csFileA);
		strFileB = my_W2A((LPCWSTR)csFileB);

		/*
		// 打印X509證書的模塊信息
		openssl x509 -inform PEM -modulus -in ca-cert.pem -noout

		// 打印rsa私鑰的模塊信息
		openssl rsa -inform PEM -modulus -in ca-key.pem -noout
		*/

		sprintf(szBuf, "openssl x509 -inform PEM -modulus -in %s -noout > cert_info.txt", strFileA.c_str());
		i_rc = system(szBuf);
		_ASSERT(0 == i_rc);

		sprintf(szBuf, "openssl rsa -inform PEM -modulus -in %s -noout > key_info.txt", strFileB.c_str());
		i_rc = system(szBuf);
		_ASSERT(0 == i_rc);

		i_rc = system("fc cert_info.txt key_info.txt");
		csTmp.Format(_T("證書和私鑰%s"), (0 == i_rc) ? _T("匹配") : _T("不匹配"));
		this->SetWindowTextW(csTmp);
	} while (false);


}

void CCertKeyMatchDlg::OnDropFiles(HDROP hDropInfo)
{
	// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值

	CDialogEx::OnDropFiles(hDropInfo);
}

在程序中加入環(huán)境變量

在對(duì)話框初始化時(shí), 加入了openssl的path, 除非必要, 不污染環(huán)境變量.

BOOL CCertKeyMatchDlg::OnInitDialog()
{
// ...
	// TODO: 在此添加額外的初始化代碼

	char* psz_env_buf = new char[1024 * 1024];
	if (NULL != psz_env_buf)
	{
		char* psz_env = getenv("path");
		// ::SetEnvironmentStrings()
		sprintf(psz_env_buf, "path=%s;%s", "C:\\openssl_3d2\\bin", psz_env);

		int i_rc = _putenv(psz_env_buf);
		_ASSERT(0 == i_rc);

		delete[]psz_env_buf;
	}


	return TRUE;  // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE
}

加入環(huán)境變量后, 調(diào)用程序時(shí), 就不用寫全路徑, 就可以調(diào)用openssl.exe了.

備注

感覺(jué)自己還挺機(jī)智的:P

備注

因?yàn)閏ert和key的pem是成對(duì)的, 用everything看一下, 將cert.pem列出來(lái), 然后進(jìn)入對(duì)應(yīng)目錄找一下是否有對(duì)應(yīng)的key.pem, 最好從生成時(shí)間早的目錄找, 然后用這個(gè)工具比對(duì).
很快就找出來(lái)了.
openssl3.2 - 檢查rsa證書和私鑰是否匹配(快速手搓一個(gè)工具),openSSL,openSSL文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-821706.html

END

到了這里,關(guān)于openssl3.2 - 檢查rsa證書和私鑰是否匹配(快速手搓一個(gè)工具)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用 OpenSSL 擴(kuò)展來(lái)實(shí)現(xiàn)公鑰和私鑰加密

    首先,你需要生成一對(duì)公鑰和私鑰??梢允褂?OpenSSL 工具來(lái)生成: 1、生成私鑰 2、從私鑰生成公鑰: 現(xiàn)在你有了一個(gè)私鑰( private_key.pem )和一個(gè)對(duì)應(yīng)的公鑰( public_key.pem )。下面是如何在 PHP 中使用它們進(jìn)行加密和解密: 3、檢測(cè)是否支付OPENSSL,或用phpinfo(); 上述代碼中,

    2024年02月03日
    瀏覽(90)
  • Nginx 使用 HTTPS(準(zhǔn)備證書和私鑰)

    生成私鑰 這會(huì)生成一個(gè)加密的私鑰文件server.key。 執(zhí)行openssl genrsa命令時(shí),使用-des3參數(shù)會(huì)要求設(shè)置一個(gè)密碼來(lái)加密生成的私鑰。為了安全起見(jiàn),密碼應(yīng)該足夠復(fù)雜和長(zhǎng)。使用-des3生成受密碼保護(hù)的私鑰也是更安全的做法。 另外,在后續(xù)生成證書過(guò)程中,需要輸入同樣的密碼才能使

    2024年02月12日
    瀏覽(26)
  • RSA算法習(xí)題 (采用RSA算法,其中e=7,p=11,q=13,求出公鑰和私鑰,并求出明文85進(jìn)行加密后的密文。)

    RSA算法習(xí)題 (采用RSA算法,其中e=7,p=11,q=13,求出公鑰和私鑰,并求出明文85進(jìn)行加密后的密文。)

    1、采用RSA算法,其中e=7,p=11,q=13,求出公鑰和私鑰,并求出明文85進(jìn)行加密后的密文。 2. 找出質(zhì)數(shù) P、Q P=11 Q=13 3. 計(jì)算公共模數(shù) N = P * Q = 143 4. 歐拉函數(shù) Φ(N) = (P-1)*(Q-1) = 10 *12 = 120 5. 計(jì)算公鑰E 1Eφ(N) 所以1E120 E的取值范圍{3,7,9,11,13,17,19,...,117,119} E的取值必須和φ(N)互質(zhì) 取

    2024年02月09日
    瀏覽(100)
  • 【openssl】RSA 生成公鑰私鑰 |通過(guò)私鑰獲取公鑰

    【openssl】RSA 生成公鑰私鑰 |通過(guò)私鑰獲取公鑰

    通過(guò)博客:Window系統(tǒng)如何編譯openssl?編譯出openssl.exe(位于apps文件夾下)。 現(xiàn)在需要使用它獲得公鑰私鑰、通過(guò)私鑰獲取公鑰 目錄 說(shuō)明?。?! 一.定位openssl.exe目錄 二、進(jìn)入命令cmd 三、生成私鑰 四、已知的私鑰替換模板私鑰 五、通過(guò)私鑰生成公鑰 a.生成公鑰私鑰:跳過(guò)第四

    2024年02月04日
    瀏覽(98)
  • openssl3.2 - exp - export RSA pubKey from RSA privKey on memory

    官方給的例子(openssl3.2 - 官方demo學(xué)習(xí) - encode - rsa_encode.c)是基于文件操作的. 我的工程只需要openssl 操作內(nèi)存數(shù)據(jù), 改了一個(gè)操作buffer的版本. 從內(nèi)存中的RSA私鑰數(shù)據(jù), 導(dǎo)出RSA公鑰來(lái)用.

    2024年03月11日
    瀏覽(23)
  • openssl安裝,openssl生成私鑰以及openssl生成證書

    openssl安裝,openssl生成私鑰以及openssl生成證書

    首先安裝perl工具,下載地址: Download Install Perl - ActiveState Download Perl 5.32 and 5.28 from ActiveState get precompiled Perl distribution. ActiveState Perl is free to download. https://www.activestate.com/activeperl/downloads 我下載了 這個(gè)版本(安裝過(guò)程下一步下一步即可) 我安裝在 C:Perl64 然后下載openssl: /s

    2024年02月08日
    瀏覽(53)
  • openssl3.2 - 官方demo學(xué)習(xí) - encode - rsa_encode.c

    命令行參數(shù) server_priv_key.pem client_priv_key.pem 這2個(gè)證書是前面certs目錄里面做的 官方這個(gè)程序有bug, 給出2個(gè)證書, 還要從屏幕上輸入 if (OSSL_DECODER_from_fp(dctx, f) == 0) { /* 在這里阻塞住了, 讓在屏幕上輸入東西, 讓我輸入啥啊 ? 關(guān)鍵是輸入了, 回車也不返回程序. 先放這里, 等整明白了

    2024年02月01日
    瀏覽(77)
  • openssl3.2 - 官方demo學(xué)習(xí) - signature - rsa_pss_direct.c

    用RSA私鑰簽名 d2i_PrivateKey_ex()可以從內(nèi)存載入私鑰數(shù)據(jù), 得到私鑰EVP_PKEY* 從私鑰產(chǎn)生ctx, 對(duì)ctx進(jìn)行簽名初始化, 設(shè)置ctx的padding填充模式 摘要算法選用SHA256, 對(duì)ctx設(shè)置摘要算法 嘗試簽名, 得到簽名長(zhǎng)度, 然后進(jìn)行私鑰簽名, 得到私鑰簽名buffer. 用RSA公鑰驗(yàn)簽 d2i_PublicKey()可以從內(nèi)存

    2024年01月18日
    瀏覽(47)
  • openssl3.2 - 官方demo學(xué)習(xí) - signature - rsa_pss_hash.c

    對(duì)私鑰對(duì)明文做簽名(摘要算法為SHA256) 用公鑰對(duì)密文做驗(yàn)簽(摘要算法為SHA256)

    2024年01月19日
    瀏覽(39)
  • openssl3.2 - 官方demo學(xué)習(xí) - pkey - EVP_PKEY_RSA_keygen.c

    官方指出 : RSA key 如果小于2048位, 就屬于弱key 官方demo中, 給出的默認(rèn)key長(zhǎng)度為4096位 從名字生成上下文 初始化上下文 設(shè)置上下的key位數(shù) 設(shè)置質(zhì)數(shù)數(shù)量為2 產(chǎn)生RSA Key. (在我的本本上, 單步調(diào)試時(shí), 感覺(jué)產(chǎn)生 RSA key時(shí), 卡了一下, 大概不到1秒鐘) 打印rsa key內(nèi)容(可以得到 n, e, d, p,

    2024年01月17日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包