『壹』 什麼是字元串 字元串的存儲是怎樣的
字元串是一對雙撇號括起來的字元序列,字元串的存儲給你舉一個例子就知道了:
字元串常量「」,占內存單元是六個,而不是五個,因為C規定,以字元「\0」作為字元串結束標志,但在輸出是不輸出「\0」.
就解釋這么多,希望對你有所幫助。
『貳』 如何在資料庫中存儲長字元串
備注型欄位寬度由系統固定為4位,實際上這個4位是個鏈接,內容可以寫很多,遠遠大於255位元組,要使用edit命令修改。
『叄』 X509Certificate2類怎樣導入一個公鑰字元串
此過程說明如何輕松設置加密示例。方法是從「我的證書」存儲中導出公鑰證書,而不導出私鑰,然後將該公鑰證書導入「通訊簿」證書存儲。要設置以下示例,請先按照該示例主題中的設置說明操作。這些說明建議使用此主題中的步驟將一個或多個生成的公鑰證書放入「通訊簿」證書存儲。
『肆』 directadmin控制面板怎麼安裝ssl證書
1、先登錄到Ddirectadmin面板,找到「SSL證書」按鈕並點擊進入;
最後保存配置,至此Ddirectadmin安裝配置SSL證書就完成。稍等一會,SSL證書就生效了,就可以用https://域名訪問網站了!
『伍』 如何將證書字元串轉換為X509結構
(1)Openssl生成公私鑰
使用Openssl是為了生成公鑰和私鑰對,用於外部商戶系統和xxx系統之間報文的安全性驗證。如果使用者不需要生成公私鑰,而是直接對報文進行處理,則參考第四部分,計算摘要及簽名值。
1. 安裝openssl步驟直接點擊exe文件。出現需要安裝vs2008插件的,直接忽略。
2. 在安裝過程中找到OpenSSL相應的安裝目錄,進入bin目錄下找到openssl.exe可執行文件,點擊運行。然後分別按順序輸入如下命令:
a. genrsa –out private-rsa.key 1024
說明:該命令是生成一個沒有加密的私鑰
genrsa 生成私鑰文件,私鑰存儲在private-rsa.key中,長度為1024。out後面指定輸出文件名。
private-rsa.key 為生成的私鑰文件,但該文件必須經過處理得到私鑰。
b. req –new –x509 –key private-rsa.key –days 750 –outpublic-rsa.cer
說明:根據private-rsa.key生成證書public-rsa.cer
-new 表示新的請求
-509 表示輸出的證書結構
750表示證書有效天數
-out public-rsa.cer -out後面表示公鑰證書,用於驗證數字簽名,此公鑰證書或者公鑰需要提前發送給需要驗證本單位或部門數據的接收方。
c. pkcs12 –export –name test-alias –in public-rsa.cer–inkey private-rsa.key –out 99bill-rsa.pfx
說明:生成PKCS12 格式Keystore
密碼前後輸入要一致,這個密碼在用Keystore生成公私鑰過程中會用到。
Public-rsa.cer, private-rsa.key是之前生成的。
附1:
下述代碼是從99bill-rsa.pfx中獲取私鑰的Java版本代碼。因為private-rsa.key中生成的私鑰無法直接使用,必須進行一定的處理。
代碼有幾個注意點:
文件流初始化路徑需要根據自己的實際路徑來填寫。
密碼是在第二節中c步驟中的密碼,本實例輸入的是suning。
KeyStorekeyStore = KeyStore.getInstance("PKCS12");
= newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx");
char[]nPassword = "suning".toCharArray();
StringkeyAlias = null;
keyStore.load(fileInputStream,nPassword);
fileInputStream.close();
System.out.println("keystoretype=" + keyStore.getType());
Enumerationenumeration = keyStore.aliases();
if(enumeration.hasMoreElements())
{
keyAlias = (String) enumeration.nextElement();
System.out.println("alias=[" + keyAlias +"]");
}
System.out.println("iskey entry=" + keyStore.isKeyEntry(keyAlias));
PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword);
//私鑰轉成字元串
StringprivateStr = Base64.encodeBase64String(prikey.getEncoded()).trim();
//生成公鑰字元串,還可以通過cer證書生成
Certificatecert = keyStore.getCertificate(keyAlias);
PublicKeypubkey = cert.getPublicKey();
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
注意:
1. 所用類的說明:
Base64:
import org.apache.commons.net.util.Base64;
Certificate:
import java.security.cert.Certificate;
2. 在openssl生成公私鑰過程中,用戶輸入了密碼。本例中密碼為suning。
1. 摘要及生成方法
摘要的生成過程(digest方法全部實現了下述3個過程):
1. 根據key對傳來的map數據排序;
2. 生成a1=b1&a2=b2&a3=b3形式的字元串,排除某些字元串Key值;
3. 調用digest方法進行md5編碼;
以上三步均通過Digest.digest()方法實現:
String digest = Digest.digest(Map map, String... keys);
傳遞的http報文體body內容如a1=b1&a2=b2&a3=b3形式的字元串,提取出需要加簽的字元串並轉成map形式。execludeKes是要排除的欄位,是一個字元串數組。
計算摘要這一步很關鍵,因為選取的欄位要求發送方和接收方必須一致,即發送方對哪些欄位計算摘要,那麼同樣地接收方也必須對相同的欄位計算摘要,否則會報6601的錯誤。
說明:a. Map是存儲了計算摘要的欄位
b. keys表示排除的欄位,不能用於計算摘要的欄位,如signature,signAlgorithm
2. 公鑰證書及字元串轉換方法
轉換的目的:便於存儲。(商戶直接提供公鑰證書也可以,但是對於向驗簽系統提供公鑰字元串的商戶,需要用下述代碼把公鑰轉成字元串)
1. 公鑰/私鑰字元串轉成公鑰/私鑰,主要是把字元串轉成公鑰PublicKey
X509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey));
KeyFactorykeyFactory = KeyFactory.getInstance(RSA);
PublicKeypubKey = keyFactory.generatePublic(pubKeySpec);
2. 公鑰或私鑰轉成Base64字元串:
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
3. 公私鑰驗證方法
驗證目的:公私鑰生成之後,需要驗證是否匹配。(之前許多商戶生成公私鑰混亂,無法確定公私鑰是否匹配就添加到驗簽系統中)。此代碼由用戶自己用junit驗證運行。驗證公私鑰生成是否正確,如果result為true,則說明公私鑰生成正確;否則生成的公私鑰有問題,不能使用。
String prik1 ="";
String pubb ="";
String data ="wkk";
String digest =Digest.digest(data);
PrivateKey privateKey =RSAUtil.getPrivateKey(prik1);
String sign =RSAUtil.sign(digest, privateKey);
boolean result =RSAUtil.vertiy(digest, sign,
RSAUtil.getPublicKey(pubb));
System.out.println(result);
『陸』 如何使用數字證書
用戶在進行需要使用證書的網上操作時,必須准備好裝有證書的存儲介質。如果用戶是在自己的計算機上進行操作,操作前必須先安裝CA根證書。一般所訪問的系統如果需要使用數字證書會自動彈出提示框要求安裝根證書,用戶直接選擇確認即可;當然也可以直接登陸CA中心的網站,下載安裝根證書。操作時,一般系統會自動提示用戶出示數字證書或者插入證書介質(IC卡或Key),用戶插入證書介質後系統將要求用戶輸入密碼口令,此時用戶需要輸入申請證書時獲得的密碼信封中的密碼,密碼驗證正確後系統將自動調用數字證書進行相關操作。使用後,用戶應記住取出證書介質,並妥善保管。當然,根據不同系統數字證書會有不同的使用方式,但系統一般會有明確提示,用戶使用起來都較為方便
『柒』 如何用Java讀取使用證書
x.security.certificate包,並且提供對證書的操作方法,代碼如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.io.*;
public class CARead extends JPanel {
private String CA_Name;
private String CA_ItemData[][] = new String[9][2];
private String[] columnNames = {"證書欄位標記","內容" };
public CARead(String CertName) {
CA_Name=CertName;
/* 三個Panel用來顯示證書內容*/
JTabbedPane tabbedPane = new JTabbedPane();
JPanel panelNormal = new JPanel();
tabbedPane.addTab("普通信息", panelNormal);
JPanel panelAll=new JPanel();
panelAll.setLayout(new BorderLayout());
tabbedPane.addTab("所有信息",panelAll);
JPanel panelBase64=new JPanel();
panelBase64.setLayout(new BorderLayout());
tabbedPane.addTab("Base64編碼信息",panelBase64);
/* 讀取證書常規信息 */
Read_Normal(panelNormal);
/* 讀取證書文件字元串表示內容 */
Read_Bin(panelAll);
/* 讀取證原始Base64編碼形式的證書文件 */
Read_Raw(panelBase64);
tabbedPane.setSelectedIndex(0);
setLayout(new GridLayout(1, 1));
add(tabbedPane);
}
}
定義證書信息的讀取函數如下:
private int Read_Normal(JPanel panel){
String Field;
try{
CertificateFactory certificate_factory=CertificateFactory.getInstance("X.509");
FileInputStream file_inputstream=new FileInputStream(CA_Name);
X509Certificate
x509certificate=(X509Certificate)certificate_factory.generateCertificate
(file_inputstream);
Field=x509certificate.getType();
CA_ItemData[0][0]="類型";
CA_ItemData[0][1]=Field;
Field=Integer.toString(x509certificate.getVersion());
CA_ItemData[1][0]="版本";
CA_ItemData[1][1]=Field;
Field=x509certificate.getSubjectDN().getName();
CA_ItemData[2][0]="標題";
CA_ItemData[2][1]=Field;
/* 以下類似,這里省略
Field=x509certificate.getNotBefore().toString();得到開始有效日期
Field=x509certificate. getNotAfter().toString();得到截止日期
Field=x509certificate.getSerialNumber().toString(16);得到序列號
Field=x509certificate.getIssuerDN().getName();得到發行者名
Field=x509certificate.getSigAlgName();得到簽名演算法
Field=x509certificate.getPublicKey().getAlgorithm();得到公鑰演算法 */
file_inputstream.close();
final JTable table = new JTable(CA_ItemData, columnNames);
TableColumn tc=null;
tc = table.getColumnModel().getColumn(1);
tc.setPreferredWidth(600);
panel.add(table);
}catch(Exception exception){
exception.printStackTrace();
return -1;
}
return 0;
}
『捌』 哈希表如何存儲字元串
LZ 哈希表 貌似是一種查找方式吧
然後你弄個數組 鏈表什麼的存儲任何你想要存儲的數據
比如說 你可以將 jan 存儲在 array[j+a+n]中
要查找jan 時 就可以直接找到了了
輸入 jan 然後 查找那個存儲單元就好
『玖』 如何使用證書存儲在python中的字元串變數打開ssl套接字
查看源代碼,ssl.wrap_socket直接調用本地代碼(openssl)函數SSL_CTX_use_cert_chain_file,它需要一個文件的路徑,因此您無法做的是嘗試做的。
參考:
在ssl
/
init
.py中,我們看到:
def
wrap_socket(sock,keyfile
=無,certfile
=無,
server_side
=
False,cert_reqs
=
CERT_NONE,
ssl_version
=
PROTOCOL_SSLv23,ca_certs
=
None,
do_handshake_on_connect
=
True):
return
SSLSocket
sock,keyfile
=
keyfile,certfile
=
certfile,
server_side
=
server_side,cert_reqs
=
cert_reqs,
ssl_version
=
ssl_version,ca_certs
=
ca_certs,
do_handshake_on_connect
=
do_handshake_on_connect)
將我們指向SSLSocket構造函數(它在同一個文件中),我們看到以下情況:
self._sslobj
=
_ssl2.sslwrap(self._sock,server_side,
keyfile,certfile,
cert_reqs,ssl_version,ca_certs)
_ssl2在C(_ssl2.c)中實現
查看sslwrap函數,我們看到它正在創建一個新對象:
return(PyObject
*)newPySSLObject(Sock,key_file
,cert_file,
server_side,verification_mode,
protocol,cacerts_file);
查看該對象的構造函數,我們最終會看到:
ret
=
SSL_CTX_use_certificate_chain_file(self->
ctx,
cert_file);
這個函數在openssl中定義,所以現在我們需要切換到那個代碼庫。
在ssl
/
ssl_rsa.c中,我們最終在函數中找到:
BIO_read_filename
in,file)
如果你深入到BIO代碼(openssl的一部分)最終成為正常的fopen():
fp
=
fopen(ptr,p)
所以它看起來像它當前寫的。它必須在C的fopen()可打開的文件中。
此外,由於python的ssl庫很快跳轉到C,我在一個解決方法中看不到一個明顯的monkeypatch的地方。