色欧美4477福利网在线观看,亚洲国产AV一区二区污污污,精品欧美一区二区三区,免费人成在线观看欧美精品

    青島東軟睿道

    青島東軟睿道

    • 青島東軟睿道線上線下教學(xué)模式
    • 青島東軟睿道符合信息產(chǎn)業(yè)發(fā)展需要的大學(xué)生,
    • 青島東軟睿道精準(zhǔn)提升大學(xué)生創(chuàng)業(yè)技能,畢業(yè)生和社會(huì)需求者.

    400-882-1633

    全國學(xué)習(xí)專線 8:00-22:00

    Java中的符號(hào)意思

    JAVA 138已閱讀 2020-04-17 19:01:47
    導(dǎo)讀 對于使用Java來說,和其他編程語言類似,需要有一些分隔符、標(biāo)識(shí)符和關(guān)鍵字,它們要么是用來分割語句,要么是有特殊用途。今天我打算簡單總結(jié)總結(jié),跟大家進(jìn)行分享。

    Java中的符號(hào)意思

    【新聞介紹】

     對于使用Java來說,和其他編程語言類似,需要有一些分隔符、標(biāo)識(shí)符和關(guān)鍵字,它們要么是用來分割語句,要么是有特殊用途。今天我打算簡單總結(jié)總結(jié),跟大家進(jìn)行分享。

    正文

      目前廣泛使用的算法有MD4、MD5、SHA-1,jdk對上面都提供了支持,在java中進(jìn)行消息摘要很簡單,java.security.MessageDigest提供了一個(gè)簡易的操作方法:

      /**

      *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("\n"+messageDigest.getProvider().getInfo());

      //開始使用算法

      messageDigest.update(plainText);

      System.out.println("\nDigest:");

      //輸出算法運(yùn)算結(jié)果

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

      }

      }

      2.對稱加密:

      使用對稱加密的話,首先需要一個(gè)密鑰,可用javax.crypto.KeyGenerator產(chǎn)生一個(gè)密鑰(java.security.Key),然后傳遞給一個(gè)加密工具(javax.crypto.Cipher),該工具再使用相應(yīng)的算法來進(jìn)行加密,以下例子使用AES算法來加密:

      /**

      *PrivateExmaple.java

      *Copyright 2005-2-16

      */

      import javax.crypto.Cipher;

      import javax.crypto.KeyGenerator;

      import java.security.Key;

      /**

      *對稱加解密,消息機(jī)密性

      */

      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形成一個(gè)key

      System.out.println("\nStart generate AES key");

      KeyGenerator keyGen=KeyGenerator.getInstance("AES");

      keyGen.init(128);

      Key key=keyGen.generateKey();

      System.out.println("Finish generating DES key");

      //獲得一個(gè)加密類Cipher,ECB是加密方式,PKCS5Padding是填充方法

      Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");

      System.out.println("\n"+cipher.getProvider().getInfo());

      //使用密鑰加密

      System.out.println("\nStart 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("\nStart 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.非對稱加解密:

      jdk提供了對RSA的支持。

      /**

      *PublicExample.java

      *Copyright 2005-2-16

      */

      import java.security.Key;

      import javax.crypto.Cipher;

      import java.security.KeyPairGenerator;

      import java.security.KeyPair;

      /**

      *一個(gè)簡單的非對稱加密例子,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");

      //構(gòu)成一個(gè)RSA密鑰

      System.out.println("\nStart generating RSA key");

      KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");

      keyGen.initialize(1024);

      KeyPair key=keyGen.generateKeyPair();

      System.out.println("Finish generating RSA key");

      //獲得一個(gè)RSA的Cipher類,使用公鑰加密

      Cipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");

      System.out.println("\n"+cipher.getProvider().getInfo());

      System.out.println("\nStart 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("\nStart 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.數(shù)字簽名及驗(yàn)證

      java中的java.security.Signature類提供了數(shù)字簽名:

      /**

      *DigitalSignature2Example.java

      *Copyright 2005-2-16

      */

      import java.security.Signature;

      import java.security.KeyPairGenerator;

      import java.security.KeyPair;

      import java.security.SignatureException;

      /**

      *數(shù)字簽名,使用RSA私鑰對對消息摘要簽名,然后使用公鑰驗(yàn)證

      */

      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("\nStart 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("\nSignature:");

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

      //使用公鑰驗(yàn)證

      System.out.println("\nStart 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.數(shù)字證書。

      java是以密鑰庫的形式存儲(chǔ)密鑰和證書的,而密鑰庫就是缺省名稱為.keystore的文件(因此java不能使用USB Key載體的證書),里面的密鑰和證書可以擁有名稱(稱為別名),每個(gè)別名都由唯一的密碼保護(hù)。密鑰庫本身也受密碼保護(hù)。

      我們可以使用工具keytool,對密鑰庫進(jìn)行管理,其主要命令如下。

      certreq生成證書請求

      changealias更改條目的別名

      delete刪除條目

      exportcert導(dǎo)出證書

      genkeypair生成密鑰對

      genseckey生成密鑰

      gencert根據(jù)證書請求生成證書

      importcert導(dǎo)入證書或證書鏈

      importkeystore從其他密鑰庫導(dǎo)入一個(gè)或所有條目

      keypasswd更改條目的密鑰口令

      list列出密鑰庫中的條目

      printcert打印證書內(nèi)容

      printcertreq打印證書請求的內(nèi)容

      printcrl打印CRL文件的內(nèi)容

      storepasswd更改密鑰庫的存儲(chǔ)口令

      可以看出,雖然不是真正的CA系統(tǒng),但keytool已經(jīng)提供了CA最基本的功能。java提供了KeyStore、X509Certificate等類對密鑰庫和證書進(jìn)行操作:

      InputStream inStream=new FileInputStream("c:/certificate.p12");

      KeyStore ks=KeyStore.getInstance("PKCS12");

      ks.load(inStream,"password".toCharArray());

      String alias=ks.aliases().nextElement();

      certificate=(X509Certificate)ks.getCertificate(alias);

      System.out.println(certificate.getNotAfter());

      上面介紹的都是最基本的東西,并不是很難,但有助于大家快速實(shí)現(xiàn)在java中的密碼應(yīng)用開發(fā)。要說明的是,java自帶的密碼實(shí)現(xiàn)類其實(shí)是有限制的,一些復(fù)雜的功能或更高級(jí)算法(如256位的AES)并不支持。因此可以去找一些第三方密碼功能來代替使用。



    相關(guān)文章
    學(xué)習(xí)hive數(shù)據(jù)倉,它的優(yōu)缺點(diǎn)是什么?

    學(xué)習(xí)hive數(shù)據(jù)倉,它的優(yōu)缺點(diǎn)是什么?

    hive數(shù)據(jù)倉是由美國的Facebook公司開源的,主要是為了解決海量結(jié)構(gòu)日志的數(shù)據(jù)統(tǒng)計(jì)而誕生的。hive數(shù)據(jù)倉主要是基于Hadoop的一個(gè)開源數(shù)據(jù)倉庫工具,也是Hadoop的生態(tài)圈,它不僅可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張表,還有為我們提供SQL查詢語句,容易上手,只要你懂一些MySQL數(shù)據(jù)庫一些基本的SQL語句,你便輕松玩轉(zhuǎn)hive數(shù)據(jù)倉。... [詳情]

    131人閱讀
    招聘大數(shù)據(jù)工程師有什么要求?

    招聘大數(shù)據(jù)工程師有什么要求?

    各行各業(yè)都在布局大數(shù)據(jù)業(yè)務(wù),企業(yè)對于大數(shù)據(jù)工程師的需求進(jìn)一步提升,而想要入行大數(shù)據(jù)工程師,那么首先需要知道企業(yè)大數(shù)據(jù)工程師都要求寫什么樣的技能。大數(shù)據(jù)工程師,在企業(yè)當(dāng)中可以是一人兼顧,也可以是團(tuán)隊(duì)配合,根據(jù)自己的主營業(yè)務(wù),大數(shù)據(jù)工程師招聘要求各有不同。企業(yè)大數(shù)據(jù)工程師,主要是要基于本公司業(yè)務(wù)去實(shí)現(xiàn)大數(shù)據(jù)開發(fā)和運(yùn)維,從這一點(diǎn)上來看,對于大數(shù)據(jù)技術(shù)的要求是一方面,對于行業(yè)背景的了解是另一方面,兩方面結(jié)... [詳情]

    137人閱讀
    Java大數(shù)據(jù)開發(fā)怎么學(xué)

    Java大數(shù)據(jù)開發(fā)怎么學(xué)

    你也要考慮時(shí)間、精力、金錢等各方面的投入情況。學(xué)習(xí)和掌握大數(shù)據(jù)相關(guān)技術(shù)也非一朝一夕之事,不可能一蹴而就,一般的培訓(xùn)課程只能達(dá)到入門級(jí)別的介紹和講解,真正要并很好地運(yùn)用大數(shù)據(jù)技術(shù)你還需要后續(xù)更深入的學(xué)習(xí)和大量的實(shí)踐。所以需要你一個(gè)良好的學(xué)習(xí)規(guī)劃。... [詳情]

    139人閱讀
    Java中的符號(hào)意思

    Java中的符號(hào)意思

    對于使用Java來說,和其他編程語言類似,需要有一些分隔符、標(biāo)識(shí)符和關(guān)鍵字,它們要么是用來分割語句,要么是有特殊用途。今天我打算簡單總結(jié)總結(jié),跟大家進(jìn)行分享。... [詳情]

    138人閱讀
    java中的密碼應(yīng)用開發(fā)

    java中的密碼應(yīng)用開發(fā)

    今天介紹一下在java中如何進(jìn)行密碼應(yīng)用開發(fā)。相關(guān)密碼學(xué)概念及背景知識(shí)可參考前面的文章,本文不做過多介紹。... [詳情]

    86人閱讀
    青島東軟睿道怎么樣?

    青島東軟睿道怎么樣?

    青島東軟睿道通過線上線下教學(xué)模式的結(jié)合,為更符合信息產(chǎn)業(yè)發(fā)展需要的大學(xué)生,畢業(yè)生和社會(huì)個(gè)體提供信息技術(shù)技能培訓(xùn)服務(wù),精準(zhǔn)提升大學(xué)生創(chuàng)業(yè)技能,畢業(yè)生和社會(huì)需求者.... [詳情]

    5586人閱讀