⑴ Java通過RSA演算法獲取公私鑰對 將公鑰提供出去 如何獲取字元串的公鑰
直接將公匙BYTE數組轉換為16進制的串啊
private static char hexTable[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public static String toHexString(byte bytes[])
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++)
{
char chars[] = new char[2];
int d = (bytes[i] & 240) >> 4;
int m = bytes[i] & 15;
chars[0] = hexTable[d];
chars[1] = hexTable[m];
sb.append(chars);
}
return sb.toString();
}
⑵ 什麼是X509格式的證書在java中能否使用X509Certificate對象獲得證書的私鑰信息
證書里怎麼可能有私鑰嘛,異想天開
⑶ JAVA 如何生成證書
下面產生一個自簽證書。安裝完J2SDK(這里用的是J2SDK1.4)後,在J2SDK安裝目錄的bin目錄下,有一個keytool的可執行程序。利用keytool產生自簽證書的步驟如下:
第一步,用-genkey命令選項,產生公私密鑰對。在控制台界面輸入:keytool -genkey -alias testkeypair -keyalg RSA -keysize 1024 -sigalg MD5withRSA。這里的-alias表示使用這對公私密鑰產生新的keystore入口的別名(keystore是用來存放管理密鑰對和證書鏈的,預設位置是在使用者主目錄下,以.keystore為名的隱藏文件,當然也可指定某個路徑存放.keystore文件);-keyalg是產生公私鑰對所用的演算法,這里是RSA;-keysize定義密鑰的長度;-sigalg是簽名演算法,選擇MD5withRSA,即用RSA簽名,然後用MD5哈希演算法摘要。接下來,系統會提示進行一些輸入:
輸入keystore密碼: abc123
您的名字與姓氏是什麼?
[Unknown]: Li
您的組織單位名稱是什麼?
&nbs
問題的其他解決辦法參考 :
http://..com/question/41527308.html?a=5.7121119214148&t=JAVA+
⑷ 有了網銀證書,公鑰要自己生成嗎如何生成。(java開發中)
一般公鑰是網銀網站的控制項在用戶機器上生成的,同時在用戶機器上生成的還有私鑰。
然後公鑰發到網銀,被作成證書,還到用戶本地由網銀控制項或微軟控制項安裝。
⑸ java使用keytool生成證書的時候怎們樣設置公鑰和私鑰還有keystore密碼是什麼
1.私鑰公鑰不是用戶自己輸入的,是RSA演算法自動生成的,而你輸入的密碼只是打開那個文件或生成的證書的密碼.
2.密碼為「changeit」,而如果嘗試幾次都不成功的話,就到$JAVA_HOME\jre\lib\security\目錄下去配就可以了
⑹ JAVA公鑰加密,私鑰解密,該怎麼解決
這是在搜集資料的時候拿了個例子練手,不過有個問題就是,把這代碼放到文本里用CMD運行的時候出現了亂碼情況!所幸的是注釋,不影響效果!但是,程序要真遇到這樣的情況的話,就得轉碼了,因為文本的編碼是GBK的,而我所要粘貼的代碼的編碼是UTF-8
[html] view plain
import java.util.*;
import java.io.*;
public class Test
{
private String encodeResult;//編碼後字串
private String decodeResult;//解碼後字串
public Test()
{
}
//編碼設置
public void setEncodeResult(String encodeResult)
{
char[] src = encodeResult.toCharArray();//將待編碼字串拆分成字元數組
StringBuilder sb = new StringBuilder();//保存編碼後字元
//將待編碼字串拆分成字元數組
for(int i = 0; i< src.length; i++)
{
if(Character.isDigit(src[i]))
{
if(i != src.length-1)
{//滿足條件3
char[] temp = new char[Character.getNumericValue(src[i])+1];
Arrays.fill(temp,src[i+1]);
sb.append(temp);
sb.append("_");
}
else
{//滿足條件2
sb.append(src[i]);
}
}
else if(src[i] == '_')//滿足條件5
{
sb.append("\\UL");
sb.append("_");
}
else if(i == src.length-1)//滿足條件1,且到了字串結尾
{
sb.append(src[i]);
}
else//滿足條件1,且未到字串結尾
{
sb.append(src[i]);
sb.append("_");
}
}
this.encodeResult = new String(sb);//創建返回編碼後字串
}
//獲得編碼後結果
public String getEncodeResult()
{
return encodeResult;
}
//解碼設置
public void setDecodeResult(String encodeResult)
{
String[] temp = encodeResult.split("_");
StringBuilder sb = new StringBuilder();
for(int i = 0; i< temp.length; i++)
{
if(temp[i].equals("\\UL"))
sb.append("_");
else if(temp[i].length()>1)
sb.append(temp[i].length()-1);
else
sb.append(temp[i]);
}
this.decodeResult = new String(sb);
}
⑺ 用java怎麼實現CA頒發的數字證書的認證功能
PKI 目前使用最多的非對稱演算法是 RSA。對於基於 RSA 的 PKI 而言,CA 應有一對 RSA 的公私鑰對,私鑰是 CA 的生命內,嚴格保密,而容公鑰則發布給使用方。CA 簽發一張證書的話,主要是使用 CA 的 RSA 私鑰對證書進行簽名,並將簽名結果保存在證書當中。使用者通過 CA 發布的公鑰來驗證證書中的簽名值,就可以確定該證書是否是由該 CA 簽發的。自己要做的就是從證書中提取簽名數據和用於簽名的原始數據,再使用 CA 的公鑰驗證這個簽名就可以了。
⑻ java中如何得到公鑰的key size
接你代碼後面
Stringalgorithm=publickey.getAlgorithm();//獲取演算法
KeyFactorykeyFact=KeyFactory.getInstance(algorithm);
BigIntegerprime=null;
if("RSA".equals(algorithm)){//如果是RSA加密
RSAPublicKeySpeckeySpec=(RSAPublicKeySpec)keyFact.getKeySpec(publickey,RSAPublicKeySpec.class);
prime=keySpec.getMolus();
}elseif("DSA".equals(algorithm)){//如果是DSA加密
DSAPublicKeySpeckeySpec=(DSAPublicKeySpec)keyFact.getKeySpec(publickey,DSAPublicKeySpec.class);
prime=keySpec.getP();
}
intlen=prime.toString(2).length();//轉換為二進制,獲取公鑰長度
⑼ 如何用Java讀取使用證書
Java為安全應用提供了豐富的API,J2SDK1.4 的JSSE (JavaTM Secure Socket Extension) 包括javax.security.certificate包,並且提供對證書的操作方法,代碼如下:
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.table.*;
importjava.security.cert.CertificateFactory;
importjava.security.cert.X509Certificate;
importjava.io.*;
{
privateStringCA_Name;
privateStringCA_ItemData[][]=newString[9][2];
privateString[]columnNames={"證書欄位標記","內容"};
publicCARead(StringCertName){
CA_Name=CertName;
/*三個Panel用來顯示證書內容*/
JTabbedPanetabbedPane=newJTabbedPane();
JPanelpanelNormal=newJPanel();
tabbedPane.addTab("普通信息",panelNormal);
JPanelpanelAll=newJPanel();
panelAll.setLayout(newBorderLayout());
tabbedPane.addTab("所有信息",panelAll);
JPanelpanelBase64=newJPanel();
panelBase64.setLayout(newBorderLayout());
tabbedPane.addTab("Base64編碼信息",panelBase64);
/*讀取證書常規信息*/
Read_Normal(panelNormal);
/*讀取證書文件字元串表示內容*/
Read_Bin(panelAll);
/*讀取證原始Base64編碼形式的證書文件*/
Read_Raw(panelBase64);
tabbedPane.setSelectedIndex(0);
setLayout(newGridLayout(1,1));
add(tabbedPane);
}
}
定義證書信息的讀取函數如下:
privateintRead_Normal(JPanelpanel){
StringField;
try{
CertificateFactorycertificate_factory=CertificateFactory.getInstance("X.509");
FileInputStreamfile_inputstream=newFileInputStream(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();
finalJTabletable=newJTable(CA_ItemData,columnNames);
TableColumntc=null;
tc=table.getColumnModel().getColumn(1);
tc.setPreferredWidth(600);
panel.add(table);
}catch(Exceptionexception){
exception.printStackTrace();
return-1;
}
return0;
}