婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Java加密和數字簽名編程

Java加密和數字簽名編程

熱門標簽:黃石智能營銷電銷機器人效果 怎樣把地圖標注出來 地圖標注人員兼職 騰訊地圖標注商戶改名注冊入駐 淮南騰訊地圖標注 漯河辦理400電話 開封便宜外呼系統報價 電話機器人的特色和創新 商丘百應電話機器人有沒有效果

  本文主要談一下密碼學中的加密和數字簽名,以及其在java中如何進行使用。對密碼學有興趣的伙伴,推薦看Bruce Schneier的著作:Applied Crypotography。在jdk1.5的發行版本中安全性方面有了很大的改進,也提供了對RSA算法的直接支持,現在我們從實例入手解決問題(本文僅是作為簡單介紹):

  一、密碼學上常用的概念 

  1)消息摘要:

  這是一種與消息認證碼結合使用以確保消息完整性的技術。主要使用單向散列函數算法,可用于檢驗消息的完整性,和通過散列密碼直接以文本形式保存等,目前廣泛使用的算法有MD4、MD5、SHA-1,jdk1.5對上面都提供了支持,在java中進行消息摘要很簡單, java.security.MessageDigest提供了一個簡易的操作方法:

  /**
  *MessageDigestExample.java
  *Copyright 2005-2-16
  */
  import java.security.MessageDigest;
  /**
  *單一的消息摘要算法,不使用密碼.可以用來對明文消息(如:密碼)隱藏保存
  */
  public class MessageDigestExample{
  public static void main(String[] args) throws Exception{
  if(args.length!=1){
   System.err.println("Usage:java MessageDigestExample text");
   System.exit(1);
  }

  byte[] plainText=args[0].getBytes("UTF8");

  //使用getInstance("算法")來獲得消息摘要,這里使用SHA-1的160位算法
  MessageDigest messageDigest=MessageDigest.getInstance("SHA-1");

  System.out.println(" "+messageDigest.getProvider().getInfo());
  //開始使用算法
  messageDigest.update(plainText);
  System.out.println(" Digest:");
  //輸出算法運算結果
  System.out.println(new String(messageDigest.digest(),"UTF8"));
  }
  }

  還可以通過消息認證碼來進行加密實現,javax.crypto.Mac提供了一個解決方案,有興趣者可以參考相關API文檔,本文只是簡單介紹什么是摘要算法。

  2)私鑰加密:

  消息摘要只能檢查消息的完整性,但是單向的,對明文消息并不能加密,要加密明文的消息的話,就要使用其他的算法,要確保機密性,我們需要使用私鑰密碼術來交換私有消息。

  這種最好理解,使用對稱算法。比如:A用一個密鑰對一個文件加密,而B讀取這個文件的話,則需要和A一樣的密鑰,雙方共享一個私鑰(而在web環境下,私鑰在傳遞時容易被偵聽):

  使用私鑰加密的話,首先需要一個密鑰,可用javax.crypto.KeyGenerator產生一個密鑰(java.security.Key),然后傳遞給一個加密工具(javax.crypto.Cipher),該工具再使用相應的算法來進行加密,主要對稱算法有:DES(實際密鑰只用到56位),AES(支持三種密鑰長度:128、192、256位),通常首先128位,其他的還有DESede等,jdk1.5種也提供了對對稱算法的支持,以下例子使用AES算法來加密:

  /**
  *PrivateExmaple.java
  *Copyright 2005-2-16
  */
  import javax.crypto.Cipher;
  import javax.crypto.KeyGenerator;
  import java.security.Key;

  /**
  *私鈅加密,保證消息機密性
  */
  public class PrivateExample{
  public static void main(String[] args) throws Exception{
  if(args.length!=1){
   System.err.println("Usage:java PrivateExample ");
   System.exit(1);
  }
  byte[] plainText=args[0].getBytes("UTF8");

  //通過KeyGenerator形成一個key
  System.out.println(" Start generate AES key");
  KeyGenerator keyGen=KeyGenerator.getInstance("AES");
  keyGen.init(128);
  Key key=keyGen.generateKey();
  System.out.println("Finish generating DES key");

  //獲得一個私鈅加密類Cipher,ECB是加密方式,PKCS5Padding是填充方法
  Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");
  System.out.println(" "+cipher.getProvider().getInfo());

  //使用私鈅加密
  System.out.println(" Start encryption:");
  cipher.init(Cipher.ENCRYPT_MODE,key);
  byte[] cipherText=cipher.doFinal(plainText);
  System.out.println("Finish encryption:");
  System.out.println(new String(cipherText,"UTF8"));

  System.out.println(" Start decryption:");
  cipher.init(Cipher.DECRYPT_MODE,key);
  byte[] newPlainText=cipher.doFinal(cipherText);
  System.out.println("Finish decryption:");

  System.out.println(new String(newPlainText,"UTF8"));

  }
  }

  3)公鑰加密:

  上面提到,私鑰加密需要一個共享的密鑰,那么如何傳遞密鑰呢?web環境下,直接傳遞的話很容易被偵聽到,幸好有了公鑰加密的出現。公鑰加密也叫不對稱加密,不對稱算法使用一對密鑰對,一個公鑰,一個私鑰,使用公鑰加密的數據,只有私鑰能解開(可用于加密);同時,使用私鑰加密的數據,只有公鑰能解開(簽名)。但是速度很慢(比私鑰加密慢100到1000倍),公鑰的主要算法有RSA,還包括Blowfish,Diffie-Helman等,jdk1.5種提供了對RSA的支持,是一個改進的地方:

  /**
  *PublicExample.java
  *Copyright 2005-2-16
  */
  import java.security.Key;
  import javax.crypto.Cipher;
  import java.security.KeyPairGenerator;
  import java.security.KeyPair;
  /**
  *一個簡單的公鈅加密例子,Cipher類使用KeyPairGenerator生成的公鈅和私鈅
  */
  public class PublicExample{
  public static void main(String[] args) throws Exception{
  if(args.length!=1){
   System.err.println("Usage:java PublicExample ");
   System.exit(1);
  }

  byte[] plainText=args[0].getBytes("UTF8");
  //構成一個RSA密鑰
  System.out.println(" Start generating RSA key");
  KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");
  keyGen.initialize(1024);
  KeyPair key=keyGen.generateKeyPair();
  System.out.println("Finish generating RSA key");

  //獲得一個RSA的Cipher類,使用公鈅加密
  Cipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
  System.out.println(" "+cipher.getProvider().getInfo());

  System.out.println(" Start encryption");
  cipher.init(Cipher.ENCRYPT_MODE,key.getPublic());
  byte[] cipherText=cipher.doFinal(plainText);
  System.out.println("Finish encryption:");
  System.out.println(new String(cipherText,"UTF8"));

  //使用私鈅解密
  System.out.println(" Start decryption");
  cipher.init(Cipher.DECRYPT_MODE,key.getPrivate());
  byte[] newPlainText=cipher.doFinal(cipherText);
  System.out.println("Finish decryption:");
  System.out.println(new String(newPlainText,"UTF8"));
  }
  }

  4)數字簽名:

  數字簽名,它是確定交換消息的通信方身份的第一個級別。上面A通過使用公鑰加密數據后發給B,B利用私鑰解密就得到了需要的數據,問題來了,由于都是使用公鑰加密,那么如何檢驗是A發過來的消息呢?上面也提到了一點,私鑰是唯一的,那么A就可以利用A自己的私鑰進行加密,然后B再利用A的公鑰來解密,就可以了;數字簽名的原理就基于此,而通常為了證明發送數據的真實性,通過利用消息摘要獲得簡短的消息內容,然后再利用私鑰進行加密散列數據和消息一起發送。java中為數字簽名提供了良好的支持,java.security.Signature類提供了消息簽名:

  /**
  *DigitalSignature2Example.java
  *Copyright 2005-2-16
  */
  import java.security.Signature;
  import java.security.KeyPairGenerator;
  import java.security.KeyPair;
  import java.security.SignatureException;

  /**
  *數字簽名,使用RSA私鑰對對消息摘要簽名,然后使用公鈅驗證 測試
  */
  public class DigitalSignature2Example{
  public static void main(String[] args) throws Exception{
  if(args.length!=1){
   System.err.println("Usage:java DigitalSignature2Example ");
   System.exit(1);
  }

  byte[] plainText=args[0].getBytes("UTF8");
  //形成RSA公鑰對
  System.out.println(" Start generating RSA key");
  KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");
  keyGen.initialize(1024);

  KeyPair key=keyGen.generateKeyPair();
  System.out.println("Finish generating RSA key");
  //使用私鈅簽名
  Signature sig=Signature.getInstance("SHA1WithRSA");
  sig.initSign(key.getPrivate());
  sig.update(plainText);
  byte[] signature=sig.sign();
  System.out.println(sig.getProvider().getInfo());
  System.out.println(" Signature:");
  System.out.println(new String(signature,"UTF8"));

  //使用公鈅驗證
  System.out.println(" Start signature verification");
  sig.initVerify(key.getPublic());
  sig.update(plainText);
  try{
   if(sig.verify(signature)){
    System.out.println("Signature verified");
   }else System.out.println("Signature failed");
   }catch(SignatureException e){
    System.out.println("Signature failed");
   }
  }
  }


  5)數字證書。

  還有個問題,就是公鑰問題,A用私鑰加密了,那么B接受到消息后,用A提供的公鑰解密;那么現在有個討厭的C,他把消息攔截了,然后用自己的私鑰加密,同時把自己的公鑰發給B,并告訴B,那是A的公鑰,結果....,這時候就需要一個中間機構出來說話了(相信權威,我是正確的),就出現了Certificate Authority(也即CA),有名的CA機構有Verisign等,目前數字認證的工業標準是:CCITT的X.509:
  數字證書:它將一個身份標識連同公鑰一起進行封裝,并由稱為認證中心或 CA 的第三方進行數字簽名。

  密鑰庫:java平臺為你提供了密鑰庫,用作密鑰和證書的資源庫。從物理上講,密鑰庫是缺省名稱為 .keystore 的文件(有一個選項使它成為加密文件)。密鑰和證書可以擁有名稱(稱為別名),每個別名都由唯一的密碼保護。密鑰庫本身也受密碼保護;您可以選擇讓每個別名密碼與主密鑰庫密碼匹配。

  使用工具keytool,我們來做一件自我認證的事情吧(相信我的認證):

  1、創建密鑰庫keytool -genkey -v -alias feiUserKey -keyalg RSA 默認在自己的home目錄下(windows系統是c:documents and settings你的用戶名> 目錄下的.keystore文件),創建我們用 RSA 算法生成別名為 feiUserKey 的自簽名的證書,如果使用了-keystore mm 就在當前目錄下創建一個密鑰庫mm文件來保存密鑰和證書。

  2、查看證書:keytool -list 列舉了密鑰庫的所有的證書

  也可以在dos下輸入keytool -help查看幫助。

   4)數字簽名:

  數字簽名,它是確定交換消息的通信方身份的第一個級別。上面A通過使用公鑰加密數據后發給B,B利用私鑰解密就得到了需要的數據,問題來了,由于都是使用公鑰加密,那么如何檢驗是A發過來的消息呢?上面也提到了一點,私鑰是唯一的,那么A就可以利用A自己的私鑰進行加密,然后B再利用A的公鑰來解密,就可以了;數字簽名的原理就基于此,而通常為了證明發送數據的真實性,通過利用消息摘要獲得簡短的消息內容,然后再利用私鑰進行加密散列數據和消息一起發送。java中為數字簽名提供了良好的支持,java.security.Signature類提供了消息簽名:

  /**
  *DigitalSignature2Example.java
  *Copyright 2005-2-16
  */
  import java.security.Signature;
  import java.security.KeyPairGenerator;
  import java.security.KeyPair;
  import java.security.SignatureException;

  /**
  *數字簽名,使用RSA私鑰對對消息摘要簽名,然后使用公鈅驗證 測試
  */
  public class DigitalSignature2Example{
  public static void main(String[] args) throws Exception{
  if(args.length!=1){
   System.err.println("Usage:java DigitalSignature2Example ");
   System.exit(1);
  }

  byte[] plainText=args[0].getBytes("UTF8");
  //形成RSA公鑰對
  System.out.println(" Start generating RSA key");
  KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");
  keyGen.initialize(1024);

  KeyPair key=keyGen.generateKeyPair();
  System.out.println("Finish generating RSA key");
  //使用私鈅簽名
  Signature sig=Signature.getInstance("SHA1WithRSA");
  sig.initSign(key.getPrivate());
  sig.update(plainText);
  byte[] signature=sig.sign();
  System.out.println(sig.getProvider().getInfo());
  System.out.println(" Signature:");
  System.out.println(new String(signature,"UTF8"));

  //使用公鈅驗證
  System.out.println(" Start signature verification");
  sig.initVerify(key.getPublic());
  sig.update(plainText);
  try{
   if(sig.verify(signature)){
    System.out.println("Signature verified");
   }else System.out.println("Signature failed");
   }catch(SignatureException e){
    System.out.println("Signature failed");
   }
  }
  }

  5)數字證書。

  還有個問題,就是公鑰問題,A用私鑰加密了,那么B接受到消息后,用A提供的公鑰解密;那么現在有個討厭的C,他把消息攔截了,然后用自己的私鑰加密,同時把自己的公鑰發給B,并告訴B,那是A的公鑰,結果....,這時候就需要一個中間機構出來說話了(相信權威,我是正確的),就出現了Certificate Authority(也即CA),有名的CA機構有Verisign等,目前數字認證的工業標準是:CCITT的X.509:
  數字證書:它將一個身份標識連同公鑰一起進行封裝,并由稱為認證中心或 CA 的第三方進行數字簽名。

  密鑰庫:java平臺為你提供了密鑰庫,用作密鑰和證書的資源庫。從物理上講,密鑰庫是缺省名稱為 .keystore 的文件(有一個選項使它成為加密文件)。密鑰和證書可以擁有名稱(稱為別名),每個別名都由唯一的密碼保護。密鑰庫本身也受密碼保護;您可以選擇讓每個別名密碼與主密鑰庫密碼匹配。

  使用工具keytool,我們來做一件自我認證的事情吧(相信我的認證):

  1、創建密鑰庫keytool -genkey -v -alias feiUserKey -keyalg RSA 默認在自己的home目錄下(windows系統是c:documents and settings你的用戶名> 目錄下的.keystore文件),創建我們用 RSA 算法生成別名為 feiUserKey 的自簽名的證書,如果使用了-keystore mm 就在當前目錄下創建一個密鑰庫mm文件來保存密鑰和證書。

  2、查看證書:keytool -list 列舉了密鑰庫的所有的證書

  也可以在dos下輸入keytool -help查看幫助。

您可能感興趣的文章:
  • JAVA加密算法數字簽名實現原理詳解
  • Java PDF 添加數字簽名的實現方法
  • Java實現的數字簽名算法RSA完整示例
  • 詳解Java數字簽名提供XML安全
  • 淺析java消息摘要與數字簽名
  • Java數字簽名算法DSA實例詳解
  • Java加密解密和數字簽名完整代碼示例
  • 使用數字簽名實現數據庫記錄防篡改(Java實現)
  • 常用數字簽名算法RSA與DSA的Java程序內實現示例
  • Java2下Applet數字簽名
  • Java 添加數字簽名到excel及檢測,刪除簽名

標簽:大興安嶺 拉薩 岳陽 馬鞍山 亳州 武威 紅河 鄭州

巨人網絡通訊聲明:本文標題《Java加密和數字簽名編程》,本文關鍵詞  Java,加密,和,數字簽名,編程,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Java加密和數字簽名編程》相關的同類信息!
  • 本頁收集關于Java加密和數字簽名編程的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产成人一区二区精品非洲| 日韩av二区在线播放| 国产99一区视频免费| 91精品国产色综合久久不卡蜜臀| 国产欧美日韩在线| 老司机一区二区| 欧美日韩激情在线| 婷婷亚洲久悠悠色悠在线播放 | 91网站最新网址| 欧美一区三区四区| 日韩精品欧美精品| 成人黄动漫网站免费app| 久久精品欧美一区二区三区麻豆 | 一区二区三区**美女毛片| 亚洲一区二区精品视频| 欧美日高清视频| 久久精品av麻豆的观看方式| 99久久婷婷国产综合精品| 欧美麻豆精品久久久久久| 蜜臀av一区二区在线免费观看| 粉嫩av一区二区三区粉嫩| 国产欧美精品在线观看| 夫妻av一区二区| 亚洲欧美日韩在线不卡| 欧美三级电影在线看| 日韩电影免费在线观看网站| 久久综合九色欧美综合狠狠| 国产精品1区二区.| 欧美精品一区二区精品网| 精品一区二区三区久久| 国产日韩欧美制服另类| 成人的网站免费观看| 国产精品传媒在线| 91视频你懂的| 久久国产精品免费| 国产精品久久久久aaaa樱花| 欧美高清视频一二三区 | 91在线观看一区二区| 亚洲一区二区视频在线观看| 色综合久久88色综合天天免费| 一区二区三区电影在线播| 欧美日韩一区在线观看| 捆绑调教美女网站视频一区| 中文字幕五月欧美| 欧美一级精品大片| 不卡一区二区在线| 蜜桃精品视频在线观看| 国产精品卡一卡二卡三| 欧美人体做爰大胆视频| 国产永久精品大片wwwapp| 国产精品第五页| 国产午夜精品一区二区| 欧美精品在线视频| 久久精品国产精品青草| 亚洲国产精品视频| 亚洲人xxxx| 国产精品乱码一区二区三区软件| 欧美电影影音先锋| 一本大道久久a久久综合| 国产一区啦啦啦在线观看| 免费在线看一区| 日韩中文字幕一区二区三区| 天堂va蜜桃一区二区三区漫画版| 日韩欧美国产综合| 欧美午夜不卡在线观看免费| 成人动漫视频在线| 丰满亚洲少妇av| 国产精品自在欧美一区| 日本va欧美va精品| 亚洲一级不卡视频| 国产激情偷乱视频一区二区三区| 99视频一区二区三区| 九色|91porny| 午夜精品久久久久影视| 亚洲色图一区二区| 亚洲精选一二三| 亚洲欧美偷拍卡通变态| 亚洲欧美电影院| 亚洲午夜久久久久久久久电影网 | 天天色 色综合| 亚洲国产综合人成综合网站| 亚洲欧洲综合另类在线| 国产免费观看久久| 国产精品美女久久久久久2018| 91碰在线视频| 色999日韩国产欧美一区二区| 五月天一区二区| 午夜精品在线看| 视频一区二区三区在线| 国产精品日韩成人| 亚洲欧美电影一区二区| 国产精品高潮呻吟| 亚洲国产色一区| 久久99国产精品尤物| 国产成人av电影在线观看| 成人av影院在线| 在线精品视频小说1| 在线免费亚洲电影| 欧美日韩国产在线观看| 色综合天天综合在线视频| 欧美视频中文字幕| 一本色道久久综合狠狠躁的推荐| 欧美视频中文一区二区三区在线观看 | 日韩欧美一级精品久久| 亚洲妇女屁股眼交7| 日韩电影免费一区| 成人av动漫在线| 99久久久久久| 在线观看日韩av先锋影音电影院| 欧美日韩免费观看一区三区| 欧美一区二区三区四区五区| 中文字幕欧美激情一区| 一区二区三区四区不卡视频| 国产精品一卡二卡在线观看| 91电影在线观看| 欧美精品一区二区三区视频 | 欧美午夜一区二区| 亚洲福利视频导航| 久久精品国产网站| 欧美激情一区二区三区蜜桃视频| 国产精品久久久久久久久晋中| 精久久久久久久久久久| 亚洲国产日日夜夜| 国产一区二区三区四区五区入口| 色诱视频网站一区| 欧美一区二区在线看| 日本一区二区三区免费乱视频 | 久久er99热精品一区二区| 国产综合久久久久久久久久久久| 91在线高清观看| 久久色在线视频| 亚洲成人激情自拍| 欧美日本在线视频| 国产综合久久久久影院| 免费欧美高清视频| 成人精品电影在线观看| 欧美日韩一级片在线观看| 国产日韩欧美一区二区三区乱码| 麻豆久久一区二区| 欧美二区乱c少妇| 午夜伊人狠狠久久| 99精品视频中文字幕| 久久久久久久综合日本| 青青草97国产精品免费观看无弹窗版| 色av一区二区| 亚洲一区二区三区中文字幕| 色综合天天综合色综合av| 中文字幕欧美日本乱码一线二线| 国产一区二区导航在线播放| 欧美一区二区视频在线观看| 亚洲自拍欧美精品| 色综合久久久久综合体| 国产精品天美传媒沈樵| 成人精品鲁一区一区二区| 国产欧美一区二区精品性色| 欧美a级一区二区| 91精品一区二区三区久久久久久| 亚洲综合在线观看视频| 91国偷自产一区二区使用方法| 国产精品久99| 欧美制服丝袜第一页| 午夜精品久久久| 日韩欧美视频在线| 日本一不卡视频| 久久久www成人免费毛片麻豆| 成人av电影在线| 亚洲国产婷婷综合在线精品| 精品国产乱码久久久久久浪潮 | 国产精品全国免费观看高清| 福利一区在线观看| 欧美激情中文不卡| 99国产精品99久久久久久| 亚洲福利视频导航| 精品三级av在线| 国产一区欧美一区| 久久免费的精品国产v∧| 不卡的av网站| 亚洲国产视频一区| 久久新电视剧免费观看| 国产精品亚洲专一区二区三区| 亚洲免费成人av| 欧美福利视频一区| 青青草视频一区| 18欧美亚洲精品| 91精品在线免费| 成人免费毛片嘿嘿连载视频| 自拍偷拍国产精品| 欧美成人福利视频| 91蜜桃网址入口| 天天综合色天天综合色h| 欧美日韩成人综合| 高清在线成人网| 免费看日韩a级影片| 亚洲男帅同性gay1069| 精品国产露脸精彩对白| 91精品福利在线| 蜜桃av噜噜一区二区三区小说| 亚洲宅男天堂在线观看无病毒| 久久久精品免费网站| 91精品黄色片免费大全|