1. 程式人生 > >java加密解密與數字證書的操作

java加密解密與數字證書的操作

1 Java程式實現金鑰庫的維護
1.1 Java程式列出金鑰庫所有條目

import java.util.*;  
import java.io.*;  
import java.security.*;  
public class ShowAlias{  
    public static void main(String args[ ]) throws Exception{  
        String pass="080302";  
        String name=".keystore";  
        FileInputStream in=new FileInputStream(name);  
        KeyStore ks=KeyStore.getInstance("JKS");             
        ks.load(in,pass.toCharArray());  
        Enumeratione=ks.aliases( );  
        while( e.hasMoreElements()) {  
            System.out.println(e.nextElement());  
        }  
    }  
}    

1.2 Java程式修改金鑰庫口令

import java.io.*;  
import java.security.*;  
public class SetStorePass{  
    public static void main(String args[ ]) throws Exception{  
        char[ ] oldpass="080302".toCharArray();  
        char[ ] newpass="123456".toCharArray();  
        String name=".keystore";  
        FileInputStream in=new FileInputStream(name);  
        KeyStore ks=KeyStore.getInstance("JKS");  
        ks.load(in,oldpass);  
        in.close();  
        FileOutputStream output=new FileOutputStream(name);  
        ks.store(output,newpass);  
        output.close();   
    }  
}    

1.3 Java程式修改金鑰庫條目的口令及新增條目

package test;  
import java.io.*;  
import java.security.*;  
import java.security.cert.Certificate;  
public class SetKeyPass{  
   public static void main(String args[ ]) throws Exception{    
        //讀取相關引數    
        String name=".keystore";    
        String alias="mykey";    
        char[ ] storepass="123456".toCharArray();    
        char[ ] oldkeypass="080302".toCharArray();   
        char[ ] newkeypass="123456".toCharArray();    
        //獲取金鑰庫.keystore的KeyStore物件,並載入金鑰庫    
        FileInputStream in=new FileInputStream(name);   
        KeyStore ks=KeyStore.getInstance("JKS");   
        ks.load(in,storepass);    
        //獲取別名對應的條目的證書鏈   
        Certificate[ ] cchain=ks.getCertificateChain(alias);   
        //讀取別名對應的條目的私鑰    
        PrivateKey pk=(PrivateKey)ks.getKey(alias,oldkeypass);    
        //向金鑰庫中新增新的條目    
        ks.setKeyEntry(alias,pk,newkeypass,cchain);    
        in.close();    
        //將KeyStore物件內容寫入新檔案   
        FileOutputStream output=new FileOutputStream("333");    
        ks.store(output,storepass);    
        output.close();    
    }    
}  

1.4 Java程式檢驗別名及刪除條目

package test;  
import java.io.*;  
import java.security.*;  
public class DeleteAlias{  
    public static void main(String args[ ]) throws Exception{  
        String pass = "123456";  
        String name = ".keystore";  
        String alias = "mykey";  
        FileInputStream in=new FileInputStream(name);  
        KeyStore ks=KeyStore.getInstance("JKS");             
        ks.load(in,pass.toCharArray());  
        if (ks.containsAlias(alias)){  
            ks.deleteEntry(alias);  
            FileOutputStream output=new FileOutputStream(name);   
            ks.store(output,pass.toCharArray());   
            System.out.println("Alias "+alias+" deleted");   
        }else{   
            System.out.println("Alias not exist");   
        }   
    }  
}    

2 Java程式讀取證書和顯示證書指定資訊
2.1 Java程式從證書檔案讀取證書

import java.io.*;  
import java.security.cert.*;  
public class PrintCert{  
public static void main(String args[ ]) throws Exception{  
        CertificateFactory cf=CertificateFactory.getInstance("X.509");  
        FileInputStream in=new FileInputStream("my.cer");  
        Certificate c=cf.generateCertificate(in);    
        in.close();    
        String s=c.toString( );    
        // 顯示證書    
        FileOutputStream fout=new FileOutputStream("tmp.txt");    
         BufferedWriter out= new BufferedWriter(new OutputStreamWriter(fout));    
        out.write(s,0,s.length( ));     
        out.close();      
}  
}    

2.2 Java程式從金鑰庫直接讀取證書

import java.io.*;  
import java.security.*;  
import java.security.cert.Certificate;  
public class PrintCert2{  
    public static void main(String args[ ]) throws Exception{   
          String pass="080302";   
          String alias="mykey";   
          String name=".keystore";   
          FileInputStream in=new FileInputStream(name);    
          KeyStore ks=KeyStore.getInstance("JKS");              
          ks.load(in,pass.toCharArray());   
          Certificate c=ks.getCertificate(alias);  
          in.close();   
         System.out.println(c.toString( ));   
    }  
}    

2.3 Java程式顯示證書指定資訊(全名/公鑰/簽名等)

import java.io.*;  
import java.security.*;  
import java.security.cert.*;  
import java.math.*;    
public class ShowCertInfo{    
   public static void main(String args[ ]) throws Exception{    
        CertificateFactory cf=CertificateFactory.getInstance("X.509");    
        FileInputStream in=new FileInputStream("my.cer");    
        java.security.cert.Certificate c=cf.generateCertificate(in);  
        in.close();  
        X509Certificate t=(X509Certificate) c;    
        System.out.println("版本號 "+t.getVersion());    
        System.out.println("序列號 "+t.getSerialNumber().toString(16));    
        System.out.println("全名 "+t.getSubjectDN());   
        System.out.println("簽發者全名n"+t.getIssuerDN());    
        System.out.println("有效期起始日 "+t.getNotBefore());  
        System.out.println("有效期截至日 "+t.getNotAfter());  
        System.out.println("簽名演算法 "+t.getSigAlgName());   
        byte[] sig=t.getSignature();   
        System.out.println("簽名n"+new BigInteger(sig).toString(16));   
        PublicKey pk=t.getPublicKey();   
        byte[ ] pkenc=pk.getEncoded();   
        System.out.println("公鑰");   
        for(int i=0;i< div="">   
        System.out.print(pkenc[i]+",");   
        }    
}  
}  

關注獲取視訊
這裡寫圖片描述

相關推薦

java加密解密數字證書操作

1 Java程式實現金鑰庫的維護 1.1 Java程式列出金鑰庫所有條目 import java.util.*; import java.io.*; import java.security.*; public class ShowAlias{

JAVA加密解密數字證書

系統之間在進行互動的時候,我們經常會用到數字證書,數字證書可以幫我們驗證身份等,下面我們就來看一下在java中如何使用數字證書。 我們先使用keytool工具生成金鑰庫並匯出公鑰證書。 第一步:生成keyStroe檔案 執行如下命令: keyto

Java解密數字簽名

對稱 數組 aes 生成密鑰 分解 encode rup 特性 ntc Java加解密與數字簽名 2016-08-30 蕊蕊 java編程 ** Java加解密 ** 實現方式:JDK實現,CC,B

Java加密解密數字簽名

上一篇帖子,我們講了MAC(訊息認證碼),它可以驗證身份和防篡改。 它的機制是通過通訊雙方都持有相同的祕鑰去實現,祕鑰相同摘要才相同,沒有祕鑰就不能生成正確的摘要資訊。 但是,它有個缺點,就是通訊雙方必須持有相同的祕鑰,解決方法就是使用數字簽名 數字簽名(又稱公鑰數字簽名、

基於密鑰庫和數字證書加密解密和簽名驗證操作

return 產生 初始 www. 數字證書 ray get put 庫文件 package com.szzs; import java.io.FileInputStream; import java.security.KeyStore; import java.sec

RSA加密解密數字簽名Java實現

cto 包括 sign object misc 數據 factory 了解 對稱密鑰 RSA公鑰加密算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在

Java 實現 RSA加密解密數字簽名

RSA公鑰加密演算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。 RSA是目

password學4——Java 加密解密之消息摘要算法(MD5 SHA MAC)

加密解密 hash函數 -s -m hmac 可能 正向 技術發展 哈希算法 Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又稱為數字摘要(Digital Digest)。它是一個唯一相

java加密解密

子郵件 openssl sock 天數 file 驗證 word genrsa https 一:1.KeyManagerFactory類(密鑰管理工廠,用來管理密鑰): 構建密鑰庫管理工廠與下例一樣: System.setProperty("javax.net.ssl.k

java加密解密技術(3)對稱加密AES

import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; imp

iOS開發 RSA加密解密後臺之間的雙向加密詳解

序言 因為專案中需要用到RSA加密,剛開始也是有點亂,這兩天也整理的差不多了,希望能幫到大家。 這次先上程式碼,我想大部分人肯定是著急解決問題,所以不要廢話太多。 iOS端 後臺是PHP,給我了一段公鑰和他用私鑰加密後的base64編碼,讓我先解一下,看看能否解出(請先不要糾結為什麼給我公鑰解密,公鑰私鑰都

JAVA加密解密之凱撒加密(Caesar cipher)演算法

凱撒加密演算法簡介 凱撒加密(Caesar cipher)是一種簡單的訊息編碼方式:它根據字母表將訊息中的每個字母移動常量位k。舉個例子如果k等於3,則在編碼後的訊息中,每個字母都會向前移動3位:a會被替換為d;b會被替換成e;依此類推。字母表末尾將回捲到字母

Java 加密解密工具類AESUtil

package test; /* @auther wjh @date 2018-08-01*/ import java.security.SecureRandom; import javax.crypto.Cipher; import javax.cry

Java加密解密之對稱加密

採用單鑰密碼系統的加密方法,同一個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單金鑰加密。 其核心思想是,加密和解密都是同一個祕鑰 對稱加密常用的演算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJAC

Java 加密解密工具

package com.panda.core.db.util; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import

Java加密解密之MAC(訊息認證碼)

上一篇帖子,我們講了訊息摘要(數字摘要),它是把一個文字/檔案 通過摘要函式(hash函式)計算出一個結果。然後把文字/檔案和摘要結果一同發給接受者 接受者接收到檔案之後,也進行摘要,把兩個摘要結果進行對比。如果一致就說明文字/檔案和摘要是一致的 但是,這裡有個問題,假設A

Java加密解密全解

1 sha加密: 安全雜湊演算法(Secure Hash Algorithm)主要適用於數字簽名標準(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於2^6

Java加密解密之非對稱加密

非對稱加密演算法需要兩個金鑰來進行加密和解密,這兩個祕鑰是公開金鑰(public key,簡稱公鑰)和私有金鑰(private key,簡稱私鑰)。使用公鑰加密的,要使用私鑰解密。反之,使用私鑰加密的,要使用公鑰解密。 和對稱加密的區別是: 對稱加密:加密和解密時使用的是

java加密解密和簽名的問題

注意:加密:先用公鑰加密再用私鑰解密             解密:先用私鑰解密再用公鑰解密 因為公鑰加密長度<127 私鑰》127 關於簽名: debug--除錯 release--釋出--正式簽名--android.keystore 應用升級:包名相同   簽名

java加密解密研究6、MD演算法家族

一、簡述 MD5演算法是典型的訊息摘要演算法,其前身有MD2、MD3和MD4演算法,它由MD4、MD3和MD2演算法改進而來。不論是哪一種MD演算法,它們都需要獲得一個隨機長度的資訊併產生一個123位的資訊摘要。如果將這個128位的二進位制摘要資訊換算成十六進位制,可以得到