導航:首頁 > 證書轉讓 > 證書提取公鑰

證書提取公鑰

發布時間:2021-12-19 11:21:07

1. 怎樣從證書中獲取公鑰

這是因為在AP模式下,沒有添加組播路由。你可以在AP模式下的時候,去查看一下wifi的信息,你會發現除了默認的ip之外,wifi上沒有相應的組播路由

2. 如何從pem格式私鑰文件中獲取公鑰

Linux 工具通使來用 base64 編碼文本格式相關用自綴:
* 證書:.crt, .pem
* 私鑰:.key
* 證書請求:.csr
.cer 像二進制證書證書 key 放同文件邊候擴展名通叫 .pemJava keystore 都二進制像自格式

其實類 UNIX 系統關注文件名綴程序並證書、密鑰都明顯標識所相關軟體( openssl)處理管用擴展名亂用擴展名自識別便桌面環境能擴展名與默認操作、圖標關聯起

知道文件啥使用 file 命令識別試試經驗直接拿文本編輯器打看看
-

3. 怎麼能讀取cer證書中的公鑰進行AES加密

怎麼能讀取cer證書中的公鑰進行AES加密
非對稱演算法中,公鑰用來加密,私鑰解密,.cer的文件內可能是公鑰,也容有可能是交叉根或root根文件,一般不同的中間件要求的證書規格都不一樣,而且現在的CA機構(如沃通)在發證書的時候,都會根據不同的中間件去打包證書文件,並且提供相對的部署指南.

cer證書由p12導出(只不過cer是二進制,p12是base64,可以網上查der(二進制)轉pem(base64)),導出命令:

keytool -export -alias p12client -keystore dlt.p12 -storetype PKCS12 -storepass 密碼 -rfc -file p12.cer

4. c#怎麼從cer證書中獲取公鑰

X509Certificate2 cert = new X509Certificate2(證書文件路徑,訪問許可權)
cert.GetPublicKey();//然後將位元組編碼轉字元串

5. 如何用C++實現讀取證書文件中的公鑰數據

在C++下,我使用OPENSSL庫生成了RSA的公私鑰對與DES加密之用的會話密鑰,並將這三者及加密結果寫入文件以備在Java環境下使用。

在C++程序中,我使用使用公鑰來加密了DES的會話密鑰,然後在Java下使用私鑰來解密會話密鑰;在運算結果中,我未做其它方面的碼制轉換,即按密鑰的初始格式DER編碼,數學運算結果也是按DER編碼來實現。

在Java程序中,我從之前所存儲的幾個文件中取得密鑰與加密結果來做解密。我使用了BC的JCE,即bcprov-jdk14-119.jar,在使用之前,需要先安裝此JCE:

假設JDK:jdk1.4\jre\
把BC包放到JRE下的ext:jdk1.4\jre\lib\ext
修改文件jdk1.4\jre\lib\security\java.security:
#
# List of providers and their preference orders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.net.ssl.internal.ssl.Provider
security.provider.3=com.sun.rsajca.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider

security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider

======================================================================

C++程序源碼:

#include
#include
#include
//#define _RSA_KEY_PAIR_GENERATE_//密鑰是否要生成 只需要在第一次運行時打開此宏

#define _RSA_KEY_PAIR_TOFILE_//密鑰對是否要寫入文件

#define MAX_RSA_KEY_LENGTH 512 //密鑰的最大長度是512位元組

#define PUBKEY_ENCRYPT
#define PRIKEY_DECRYPT

#pragma comment(lib, "../lib/libeay32.lib")
static const char * PUBLIC_KEY_FILE = "pubkey.key";
static const char * PRIVATE_KEY_FILE = "prikey.key";

int RsaKeyPairGen(void)
{
RSA *rsa = NULL;

#ifdef_RSA_KEY_PAIR_GENERATE_
//生成RSA密鑰對:
rsa = RSA_new();
rsa = RSA_generate_key(1024, 0x10001, NULL, NULL);
#endif

//把密鑰對寫入文件,以後從文件里讀取
#ifdef _RSA_KEY_PAIR_TOFILE_
unsigned char ucPubKey[MAX_RSA_KEY_LENGTH] = {0}, ucPriKey[MAX_RSA_KEY_LENGTH] = {0};
int len = i2d_RSAPublicKey(rsa,NULL);
unsigned char* pt = ucPubKey;
len = i2d_RSAPublicKey(rsa, &pt);

FILE *fpubkey = NULL;
fpubkey = fopen(PUBLIC_KEY_FILE, "wb");
if(fpubkey == NULL)
{
cout << "fopen pubkey.key failed!" << endl;
return 0x01;
}
fwrite(ucPubKey, 1, len, fpubkey);
fclose(fpubkey);

len = i2d_RSAPrivateKey(rsa,NULL);
unsigned char* pt2 = ucPriKey;
len = i2d_RSAPrivateKey(rsa,&pt2);
FILE *fprikey = NULL;
fprikey = fopen(PRIVATE_KEY_FILE, "wb");
if(fprikey == NULL)
{
cout << "fopen prikey.key failed!" << endl;
return 0x02;
}
fwrite(ucPriKey, 1, len, fprikey);
fclose(fprikey);
#endif

if(rsa != NULL)
{
RSA_free(rsa);
rsa = NULL;
}
return 0;
}

//從文件里讀取私鑰的數據,取得RSA格式的私鑰:
int GetPriKey(unsigned char *pucPriKeyData, unsigned long KeyDataLen, RSA* *priRsa)
{
unsigned char *Pt = pucPriKeyData;
*priRsa = d2i_RSAPrivateKey(NULL, &Pt, KeyDataLen);
if(priRsa == NULL)
{
cout << "priRsa == NULL!" << endl;
return 0x22;
}
return 0;
}

//取得RSA格式的公鑰:
int GetPubKey(unsigned char *pucPubKeyData,unsigned long KeyDataLen, RSA* *pubRsa)
{
unsigned char *Pt = pucPubKeyData;
*pubRsa = d2i_RSAPublicKey(NULL, &Pt, KeyDataLen);
if(pubRsa == NULL)
{
cout << "pubRsa == NULL!" << endl;
return 0x31;
}
return 0;
}

//公鑰加密會話密鑰:
int encSessionKeybyRsaPubKey(RSA *rsa, unsigned char *ucKey, unsigned long ulKeyLen,
unsigned char *outData, unsigned long *pulOutLen)
{
return (*pulOutLen = RSA_public_encrypt(ulKeyLen, ucKey, outData, rsa, 1));
}

//私鑰解密會話密鑰:
int decSessionKeybyRsaPriKey(RSA *rsa, unsigned char *InData, unsigned long ulDataLen,
unsigned char *ucKey, unsigned long *pulKeyLen)
{
return (*pulKeyLen = RSA_private_decrypt(ulDataLen, InData, ucKey, rsa, 1));
}

int main(int argc, char* argv[])
{
unsigned char ucKey[8] = {0x01, 0x03, 0x99, 0x4, \
0x80, 0x65, 0x34, 0x08};
unsigned char ucEncryptedKey[512] = {0}, ucDecryptedKey[512] = {0};
unsigned long encrypted_len = 0, decrypted_len = 0;

#ifdef _RSA_KEY_PAIR_GENERATE_
RsaKeyPairGen();
#endif

//取得公鑰:
unsigned char ucPubKey[MAX_RSA_KEY_LENGTH] = {0};

FILE *fpubkey = NULL;
fpubkey = fopen(PUBLIC_KEY_FILE, "rb");
if(fpubkey == NULL)
{
cout << "fopen pubkey.key failed!" << endl;
return 0x03;
}
fseek(fpubkey, 0, SEEK_END);
int len_PK = ftell(fpubkey);
fseek(fpubkey, 0, SEEK_SET);
fread(ucPubKey, 1, len_PK, fpubkey);
fclose(fpubkey);

#ifdef PUBKEY_ENCRYPT
RSA *pRsaPubKey = NULL;
pRsaPubKey = RSA_new();

GetPubKey(ucPubKey, len_PK, &pRsaPubKey);
//公鑰加密:
encSessionKeybyRsaPubKey(pRsaPubKey, ucKey, sizeof(ucKey), ucEncryptedKey, &encrypted_len);
//write to file:
FILE *fp = NULL;
fp = fopen("ucKey.data", "wb");
fwrite(ucEncryptedKey, 1, encrypted_len, fp);
fclose(fp);

if(pRsaPubKey != NULL)
{
RSA_free(pRsaPubKey); pRsaPubKey = NULL;
}
#endif

//取得私鑰:
unsigned char ucPriKey[MAX_RSA_KEY_LENGTH] = {0};

FILE *fprikey = NULL;
fprikey = fopen(PRIVATE_KEY_FILE, "rb");
if(fprikey == NULL)
{
cout << "fopen prikey.key failed!" << endl;
return 0x02;
}
fseek(fprikey, 0, SEEK_END);
int len_SK = ftell(fprikey);
fseek(fprikey, 0, SEEK_SET);
fread(ucPriKey, 1, len_SK, fprikey);
fclose(fprikey);

#ifdef PRIKEY_DECRYPT
RSA *pRsaPriKey = NULL;
pRsaPriKey = RSA_new();

GetPriKey(ucPriKey, len_SK, &pRsaPriKey);
//私鑰解密:
FILE *fp1 = NULL;
fp1 = fopen("ucKey.data", "rb");
int len = ftell(fp1);
fseek(fp1, 0, SEEK_SET);
fread(ucPriKey, 1, len_SK, fp1);
fclose(fp1);
decSessionKeybyRsaPriKey(pRsaPriKey, ucEncryptedKey, encrypted_len, ucDecryptedKey, &decrypted_len);
if(pRsaPriKey != NULL)
{
RSA_free(pRsaPriKey); pRsaPriKey = NULL;
}

//數據對比:
if(0 == memcmp(ucKey, ucDecryptedKey, decrypted_len))
{
cout << "OK!" << endl;
}
else
{
cout << "FAILED!" << endl;
}
#endif

return 0;
}

6. 關於j2me提取der證書中的公鑰問題

什麼異常啊
用數組來讀取
調試一下把,這樣能具體看是哪行代碼出錯了

7. 怎樣獲取ca證書中的私鑰和公鑰

CA 也擁有一個證書(內含公鑰和私鑰)。網上的公眾用戶通過驗證 CA 的簽字從而信任 CA ,任何人都可以得到 CA 的證書(含公鑰),用以驗證它所簽發的證書。 如果用戶想得到一份屬於自己的證書,他應先向 CA 提出申請。在 CA 判明申請者的身份後,便為他分配一個公鑰,並且 CA 將該公鑰與申請者的身份信息綁在一起,並為之簽字後,便形成證書發給申請者。 如果一個用戶想鑒別另一個證書的真偽,他就用 CA 的公鑰對那個證書上的簽字進行驗證,一旦驗證通過,該證書就被認為是有效的。證書實際是由證書簽證機關(CA)簽發的對用戶的公鑰的認證。 證書的內容包括:電子簽證機關的信息、公鑰用戶信息、公鑰、權威機構的簽字和有效期等等。目前,證書的格式和驗證方法普遍遵循X.509 國際標准。 加密:我們將文字轉換成不能直接閱讀的形式(即密文)的過程稱為加密。即把我們平時看到的「http」加密成「https」來傳輸,這樣保證了信息在傳輸的過程中不被竊聽。目前國內可以完成這個工作的CA是GlobalSign。 解密:我們將密文轉換成能夠直接閱讀的文字(即明文)的過程稱為解密。 如何在電子文檔上實現簽名的目的呢?我們可以使用數字簽名。RSA公鑰體制可實現對數字信息的數字簽名, 方法:信息發送者用其私鑰對從所傳報文中提取出的特徵數據(或稱數字指紋)進行RSA演算法操作,以保證發信人無法抵賴曾發過該信息(即不可抵賴性),同時也確保信息報文在傳遞過程中未被篡改(即完整性)。當信息接收者收到報文後,就可以用發送者的公鑰對數字簽名進行驗證。 在數字簽名中有重要作用的數字指紋是通過一類特殊的散列函數(HASH函數) 生成的。 流程:CA證書簽發過程.接受的輸入報文數據沒有長度限制; 2.對任何輸入報文數據生成固定長度的摘要(數字指紋)輸出; 3.從報文能方便地算出摘要; 4.難以對指定的摘要生成一個報文,而由該報文可以算出該指定的摘要; 5.難以生成兩個不同的報文具有相同的摘要。 驗證:收方在收到信息後用如下的步驟驗證簽名: 1.使用自己的私鑰將信息轉為明文; 2.使用發信方的公鑰從數字簽名部分得到原摘要; 3.收方對您所發送的源信息進行hash運算,也產生一個摘要; 4.收方比較兩個摘要,如果兩者相同,則可以證明信息簽名者的身份。 如果兩摘要內容不符,會說明什麼原因呢? 可能對摘要進行簽名所用的私鑰不是簽名者的私鑰,這就表明信息的簽名者不可信;也可能收到的信息根本就不是簽名者發送的信息,信息在傳輸過程中已經遭到破壞或篡改。 數字證書:數字證書為實現雙方安全通信提供了電子認證。在網際網路、公司內部網或外部網中,使用數字證書實現身份識別和電子信息加密。數字證書中含有密鑰對(公鑰和私鑰)所有者的識別信息,通過驗證識別信息的真偽實現對證書持有者身份的認證。 安裝方式:在很多情況下,安裝CA證書並不是必要的。大多數操作系統的CA證書是默認安裝的。這些默認的CA證書由GoDaddy或VeriSign等知名的商業證書頒發機構頒發。因此,如果設備需要信任不知名的或本土的證書頒發機構,只需要安裝CA證書。 下載和安裝CA證書並沒有真正的標准流程。採用的方法依賴於許多因素,如正在使用的伺服器類型可作為一個證書頒發機構,證書頒發機構的配置方式以及設備上所使用的想安裝CA證書的操作系統。 如果Windows伺服器被配置為一台證書頒發機構,通常情況下,管理員可通過一個Web界面生成並下載證書。這個Web界面的地址通常是https://<the server's FQDN>/CertSRV。該Web界面中有下載CA證書的選項。 如果一台Windows PC上安裝了CA證書,該證書是由證書控制台進行安裝的。 在Windows 8個人電腦上,可以通過本地的運行功能進入CertLM.msc,從而訪問證書商店。CA證書通常安裝在第三方根認證機構容器中的受信任的根證書頒發機構中。 通常,如果想在移動設備上安裝一個CA證書,可以將證書通過電子郵件發送到該移動設備上的郵箱賬號。打開附件,證書將被安裝到該設備上。[ 證書原理:數字證書在用戶公鑰後附加了用戶信息及CA的簽名。公鑰是密鑰對的一部分,另一部分是私鑰。公鑰公之於眾,誰都可以使用。私鑰只有自己知道。由公鑰加密的信息只能由與之相對應的私鑰解密。為確保只有某個人才能閱讀自己的信件,發送者要用收件人的公鑰加密信件;收件人便可用自己的私鑰解密信件。同樣,為證實發件人的身份,發送者要用自己的私鑰對信件進行簽名;收件人可使用發送者的公鑰對簽名進行驗證,以確認發送者的身份。 在線交易中您可使用數字證書驗證對方身份。用數字證書加密信息,可以確保只有接收者才能解密、閱讀原文,信息在傳遞過程中的保密性和完整性。有了數字證書網上安全才得以實現,電子郵件、在線交易和信用卡購物的安全才能得到保證。 證書作用: 保密性 - 只有收件人才能閱讀信息。 認證性 - 確認信息發送者的身份。 完整性 - 信息在傳遞過程中不會被篡改。 不可抵賴性 - 發送者不能否認已發送的信息。 保證請求者與服務者的數據交換的安全性。 希望對你有用和幫到你。

8. 如何:導出和導入公鑰證書

此過程說明如何輕松設置加密示例。方法是從「我的證書」存儲中導出公鑰證書,而不導出私鑰,然後將該公鑰證書導入「通訊簿」證書存儲。要設置以下示例,請先按照該示例主題中的設置說明操作。這些說明建議使用此主題中的步驟將一個或多個生成的公鑰證書放入「通訊簿」證書存儲。 如何:為一個收件人封裝郵件 如何:為多個收件人封裝郵件 如何:簽名和封裝郵件要在一台計算機上運行上面的示例,需要滿足下列條件:「通訊簿」證書存儲和「我的證書」存儲中均包含郵件收件人的密鑰證書該計算機上有郵件收件人的私鑰且與「我的證書」存儲中的公鑰證書關聯示例先充當加密郵件的發件人,然後充當同一個加密郵件的收件人。通常,這兩個角色是由不同計算機上具有唯一公鑰憑據的不同實體充當。在充當加密郵件的發件人時,示例要求「通訊簿」證書存儲中包含收件人的證書。在充當加密郵件的收件人時,示例要求「我的證書」存儲中包含收件人的證書,並且該計算機上包含相應的私鑰。使用Makecert.exe 實用程序設置此示例,可以通過多種方法實現此目的。 Certificate Creation Tool (Makecert.exe) 是用於生成測試證書的一種很方便的實用程序。在生產環境中,證書由證書頒發機構生成。以下Makecert 命令生成所需的公鑰證書以及證書使用者名稱為「Recipient1」的實體的私鑰。證書將放入「我的證書」存儲。Makecert -n "CN=Recipient1" -ss My 以下過程說明如何設置證書存儲來滿足這些要求。首先,生成收件人的證書和私鑰,並將證書存儲在「我的證書」存儲中。然後將證書從「我的證書」存儲中導出,再導入「通訊簿」存儲。從「我的證書」存儲中導出公鑰證書打開Internet Explorer。在「工具」菜單上,單擊「Internet 選項」,然後單擊「內容」選項卡。單擊「證書」按鈕。在「個人」選項卡中,選擇「頒發給」下列出「Recipient1」的證書。(「個人」選項卡列出「我的證書」存儲中的證書。)單擊「導出」。(此時會打開導出向導。)單擊「下一步」。 單擊「否,不要導出私鑰」,然後單擊「下一步」。單擊「下一步」接受默認導出格式。鍵入要導出的證書的文件名或瀏覽至該文件名,單擊「下一步」,然後單擊「完成」。將證書導入「通訊簿」證書存儲在「證書」對話框中,單擊「其他人」選項卡。(「其他人」選項卡列出「通訊簿」證書存儲中的證書。)單擊「導入」,然後單擊「下一步」。鍵入要存儲導出證書的文件名的位置或瀏覽至該位置,然後單擊「下一步」。單擊「下一步」接受將導入的證書放入「其他人」證書存儲。單擊「完成」,然後單擊「確定」。

9. 公鑰證書的證書導入和導出

如果您有一個想要在其他計算機上使用的證書,可以先將證書導出,然後導入到其他計算機。詳細信息,請參閱正導入和導出證書和導入和導出證書。

10. OpenSSL 庫函數,是否有解析cer(2進制文件)證書,從中獲取公鑰的方法

X509_get_pubkey(x509Cert);

閱讀全文

與證書提取公鑰相關的資料

熱點內容
碘伏開口有效期 瀏覽:455
馬鞍山二中盧大亮 瀏覽:583
建築證書培訓 瀏覽:62
馬鞍山潘榮 瀏覽:523
2019年公需課知識產權考試答案 瀏覽:280
基本衛生公共服務項目實施方案 瀏覽:62
初中數學校本研修成果 瀏覽:30
長沙市知識產權局張力 瀏覽:369
榮玉證書 瀏覽:382
凌文馬鞍山 瀏覽:34
石柱鎮工商局 瀏覽:854
鋼鐵發明國 瀏覽:118
創造與魔法怎麼賣人民幣 瀏覽:101
知識產權專題答案 瀏覽:760
高發明巫溪 瀏覽:755
衛生室公共衛生服務考核標准 瀏覽:493
亞洲給水排水有版權嗎 瀏覽:397
湖北省醫療糾紛預防與處理辦法 瀏覽:230
星光創造營後勤在哪 瀏覽:581
北京辦理知識產權 瀏覽:177