老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

Java中怎么實(shí)現(xiàn)加密和數(shù)字簽名

Java中怎么實(shí)現(xiàn)加密和數(shù)字簽名,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

創(chuàng)新互聯(lián)成立以來(lái)不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點(diǎn),以客戶需求中心、市場(chǎng)為導(dǎo)向”的快速反應(yīng)體系。對(duì)公司的主營(yíng)項(xiàng)目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計(jì)、行業(yè) / 企業(yè)門戶設(shè)計(jì)推廣、行業(yè)門戶平臺(tái)運(yùn)營(yíng)、App定制開(kāi)發(fā)手機(jī)網(wǎng)站制作設(shè)計(jì)、微信網(wǎng)站制作、軟件開(kāi)發(fā)、西云機(jī)房等實(shí)行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)可以獲得的服務(wù)效果。

Java加密和數(shù)字簽名
消息摘要
這是一種與消息認(rèn)證碼結(jié)合使用以確保消息完整性的技術(shù)。主要使用單向散列函數(shù)算法,
可用于檢驗(yàn)消息的完整性,和通過(guò)散列密碼直接以文本形式保存等,目前廣泛使用的算法
有MD4、MD5、SHA-1, java.security.MessageDigest提供了一個(gè)簡(jiǎn)易的操作方法

私鑰加密
消息摘要只能檢查消息的完整性,但是單向的,對(duì)明文消息并不能加密,要加密明文的消息的話,
就要使用其他的算法,要確保機(jī)密性,我們需要使用私鑰密碼術(shù)來(lái)交換私有消息。
使用私鑰加密的話,首先需要一個(gè)密鑰,可用javax.crypto.KeyGenerator產(chǎn)生一個(gè)密鑰(java.security.Key),
然后傳遞給一個(gè)加密工具(javax.crypto.Cipher),該工具再使用相應(yīng)的算法來(lái)進(jìn)行加密,
主要對(duì)稱算法有:DES(實(shí)際密鑰只用到56位),AES

//java項(xiàng)目www.1b23.com
publicclass PrivateKeyExample { 
   publicstaticvoid main(String[] args) throws Exception { 
      String source = "abcdefghijk"; 
      byte[] plainText = source.getBytes("UTF-8"); 
  
      // 通過(guò)KeyGenerator形成一個(gè)key 
      KeyGenerator keyGen = KeyGenerator.getInstance("AES"); 
      keyGen.init(128); 
      Key key = keyGen.generateKey(); 
      printKey(key); 
  
      byte[] result = encryption(plainText, key); 
      System.out.println("加密后數(shù)組大小:" + result.length); 
      System.out.println("加密后Base64字符串" + Base64.encodeBytes(result)); 
      byte[] newText = decryption(result, key); 
      System.out.println("解密后字符串:" + new String(newText, "UTF-8")); 
   } 
  
   publicstaticbyte[] encryption(byte[] plainText, Key key) throws Exception { 
      // 獲得一個(gè)私鈅加密類Cipher,ECB是加密方式,PKCS5Padding是填充方法 
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
      // 使用私鈅加密 
      cipher.init(Cipher.ENCRYPT_MODE, key); 
      byte[] cipherText = cipher.doFinal(plainText); 
      return cipherText; 
   } 
  
   publicstaticbyte[] decryption(byte[] source, Key key) throws Exception { 
      // 獲得一個(gè)私鈅加密類Cipher,ECB是加密方式,PKCS5Padding是填充方法 
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
      // 使用私鈅加密 
      cipher.init(Cipher.DECRYPT_MODE, key); 
      byte[] result = cipher.doFinal(source); 
      return result; 
   } 
  
   privatestaticvoid printKey(Key key) throws UnsupportedEncodingException { 
      System.out.println("Algorithm:" + key.getAlgorithm()); 
      byte[] bytes = key.getEncoded(); 
      System.out.println("Encoded:" + Base64.encodeBytes(bytes)); 
   } 
}

公鑰加密
私鑰加密需要一個(gè)共享的密鑰,那么如何傳遞密鑰呢?web環(huán)境下,
直接傳遞的話很容易被偵聽(tīng)到,幸好有了公鑰加密的出現(xiàn)。公鑰加密也叫不對(duì)稱加密,
不對(duì)稱算法使用一對(duì)密鑰對(duì),一個(gè)公鑰,一個(gè)私鑰,使用公鑰加密的數(shù)據(jù),
只有私鑰能解開(kāi)(可用于加密);同時(shí),使用私鑰加密的數(shù)據(jù),只有公鑰能解開(kāi)(簽名)。
公鑰的主要算法有RSA

//java項(xiàng)目www.1b23.com
publicclass PublicKeyExample { 
  
   publicstaticvoid main(String[] args) throws Exception { 
      String source = "abcdefghijk"; 
      byte[] plainText = source.getBytes("UTF-8"); 
      // 生成密鑰對(duì) 
      KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); 
      keyGen.initialize(1024); 
      KeyPair key = keyGen.generateKeyPair(); 
  
      byte[] result = encryption(plainText, key); 
      System.out.println("加密后數(shù)組大小:" + result.length); 
      System.out.println("加密后Base64字符串" + Base64.encodeBytes(result)); 
      byte[] newText = decryption(result, key); 
      System.out.println("解密后字符串:" + new String(newText, "UTF-8")); 
   } 
  
   publicstaticbyte[] encryption(byte[] plainText, KeyPair keyPair) 
         throws Exception { 
      // 獲得一個(gè)RSA的Cipher類,使用公鈅加密 
      Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
      cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic()); 
      byte[] cipherText = cipher.doFinal(plainText); 
      return cipherText; 
   } 
  
   publicstaticbyte[] decryption(byte[] cipherText, KeyPair keyPair) 
         throws Exception { 
      // 獲得一個(gè)RSA的Cipher類,使用私鑰解密 
      Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
      cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate()); 
      byte[] newPlainText = cipher.doFinal(cipherText); 
      return newPlainText; 
   } 
}

數(shù)字簽名
數(shù)字簽名,它是確定交換消息的通信方身份的第一個(gè)級(jí)別。
上面A通過(guò)使用公鑰加密數(shù)據(jù)后發(fā)給B,B利用私鑰解密就得到了需要的數(shù)據(jù),
問(wèn)題來(lái)了,由于都是使用公鑰加密,那么如何檢驗(yàn)是A發(fā)過(guò)來(lái)的消息呢?
上面也提到了一點(diǎn),私鑰是唯一的,那么A就可以利用A自己的私鑰進(jìn)行加密,
然后B再利用A的公鑰來(lái)解密,就可以了;數(shù)字簽名的原理就基于此,
而通常為了證明發(fā)送數(shù)據(jù)的真實(shí)性,通過(guò)利用消息摘要獲得簡(jiǎn)短的消息內(nèi)容,
然后再利用私鑰進(jìn)行加密,散列數(shù)據(jù)和消息一起發(fā)送。
大致流程如下:
1.甲方構(gòu)建密鑰對(duì),將公鑰公布給乙方,保留私鑰。
2.甲方使用私鑰加密數(shù)據(jù),然后用私鑰對(duì)加密后的數(shù)據(jù)簽名,發(fā)送給乙方簽名以及加密后的數(shù)據(jù)。
3.乙方使用公鑰、簽名來(lái)驗(yàn)證待解密數(shù)據(jù)是否有效,如果有效使用公鑰對(duì)數(shù)據(jù)解密。
4.乙方使用公鑰加密數(shù)據(jù),向甲方發(fā)送經(jīng)過(guò)加密后的數(shù)據(jù)。
5.甲方獲得加密數(shù)據(jù),通過(guò)私鑰解密。

//java項(xiàng)目www.1b23.com
public class DigitalSignatureExample { 
  
   publicstaticvoid main(String[] args) throws Exception { 
      String source = "abcdefghijk"; 
      byte[] plainText = source.getBytes("UTF-8"); 
      System.out.println("原始字符串:" + source); 
      System.out.println("原始數(shù)據(jù)數(shù)組長(zhǎng)度:" + plainText.length); 
      // 形成RSA公鑰對(duì) 
      KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); 
      keyGen.initialize(1024); 
      KeyPair key = keyGen.generateKeyPair(); 
  
      /* 使用私鑰加密 */ 
      Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
      cipher.init(Cipher.ENCRYPT_MODE, key.getPrivate()); 
      byte[] cipherText = cipher.doFinal(plainText); 
  
      // 使用私鈅簽名 
      Signature sig = Signature.getInstance("SHA1WithRSA"); 
      sig.initSign(key.getPrivate()); 
      sig.update(cipherText); 
      byte[] signature = sig.sign(); 
      System.out.println("簽名數(shù)組長(zhǎng)度:" + signature.length); 
  
      // 使用公鑰進(jìn)行驗(yàn)證 
      sig.initVerify(key.getPublic()); 
      sig.update(cipherText); 
      try { 
         if (sig.verify(signature)) { 
            System.out.println("數(shù)字簽名驗(yàn)證通過(guò)"); 
            /* 使用公鑰解密 */ 
            cipher.init(Cipher.DECRYPT_MODE, key.getPublic()); 
            byte[] newPlainText = cipher.doFinal(cipherText); 
            System.out.println("解密后的字符串:" 
                   + new String(newPlainText, "UTF-8")); 
         } else 
            System.out.println("數(shù)字簽名驗(yàn)證失敗"); 
      } catch (SignatureException e) { 
         System.out.println("捕捉到異常,數(shù)字簽名驗(yàn)證失敗"); 
      } 
   }   
}

看完上述內(nèi)容,你們掌握J(rèn)ava中怎么實(shí)現(xiàn)加密和數(shù)字簽名的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


文章標(biāo)題:Java中怎么實(shí)現(xiàn)加密和數(shù)字簽名
轉(zhuǎn)載來(lái)源:http://www.xueling.net.cn/article/picspe.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 亚洲中文久久精品无码浏不卡 | 国产精品手机视频一区二区 | 日韩不卡一二三 | 国产专区中文字幕 | 无码人妻一区二区三区一 | 久久av日韩 | 国产一区二区影视 | 免费日韩视频在线观看 | 中文字幕精品—区二区 | 好男人看在线视频 | 久艹在线观看视频 | 亚洲成人国产精品 | 精品久久久久久久久久ntr影视 | 中文字幕成熟丰满人妻 | 亚洲AV蜜桃永久无码精品 | 97一区二区三区 | 中文字幕被公侵犯的漂亮人妻 | 国产成人久久久精品二区三区 | 麻豆AV无码精品一区二区 | 韩国精品在线 | 夜夜激情网 | 久久伊人精品视频 | 久久久精品人妻无码专区不卡 | 亚洲综合精品在线 | 少妇太爽了在线观看 | 国产强被迫伦姧在线观看无码 | 中文字幕亚洲在线观看 | 激情美女一区 | 伊人丁香五月婷婷综合激情四射网 | 丁香五月色情婷婷在线观看 | 女人被躁到高潮嗷嗷叫69 | 中国一级片 | 成人av影片在线观看 | 91综合色 | 国产欧美日韩一区二区三区四区 | 国产成人福利 | 国产精品久久久久久久久久红粉 | 亚洲人成中文字幕在线观看 | 中文字幕在线观看日韩 | 免费国产va在线观看中文字 | 四虎久久精品 |