1. 程式人生 > >Java常用到的六個加密方式

Java常用到的六個加密方式

加密,是以某種特殊的演算法改變原有的資訊資料,使得未授權的使用者即使獲得了已加密的資訊,但因不知解密的方法,仍然無法瞭解資訊的內容。大體上分為雙向加密和單向加密。

雙向加密:分為對稱加密和非對稱加密(有些資料將加密直接分為對稱加密和非對稱加密)。雙向加密大體意思就是明文加密後形成密文,可以通過演算法還原成明文。

單向加密:單向加密只是對資訊進行了摘要計算,不能通過演算法生成明文,單向加密從嚴格意思上說不能算是加密的一種,應該算是摘要演算法。

一、主要的加密方式程式碼提供方
JDK:程式碼在java安裝目錄下的jre\lib\jce.jar包裡;
CC:Apache公司提供的org.apache.commons.codec
主頁: 

http://commons.apache.org/proper/commons-codec/
BC:org.bouncecastle
主頁: http://www.bouncycastle.org/java.html
基本常用的使用JDK就夠了。

二、Base64演算法
1、從現在加密演算法的複雜性來看Base64這種都不好意思說自己是加密,不過對於完全不懂計算機的人來說也夠用了。採用Base64編碼具有不可讀性,即所編碼的資料不會被人用肉眼所直接看到。
Base64編碼一般用於url的處理,或者說任何你不想讓普通人一眼就知道是啥的東西都可以用Base64編碼處理後再發布在網路上。

?
12345678910111213141516171819202122232425package com.amuro.strategy.base64;import java.util.Base64;import com.amuro.strategy.IStrategy;/*** Base64演算法基於64個基本字元,加密後的string中只包含這64個字元* @author Amuro**/public class Base64Strategy implements IStrategy{public String encode(String src){byte[] encodeBytes = Base64.getEncoder().encode(src.getBytes());
return new String(encodeBytes);}public String decode(String src){byte[] decodeBytes = Base64.getDecoder().decode(src.getBytes());return new String(decodeBytes);}}

2、Base64編碼對應關係表

三、訊息摘要演算法(Message Digest)
訊息摘要(Message Digest)又稱為數字摘要(Digital Digest)。它是一個唯一對應一個訊息或文字的固定長度的值,它由一個單向Hash加密函式對訊息進行作用而產生。HASH函式的抗衝突性使得如果一段明文稍有變化,哪怕只更改該段落的一個字母,通過雜湊演算法作用後都將產生不同的值。而HASH演算法的單向性使得要找到雜湊值相同的兩個不同的輸入訊息,在計算上是不可能的。所以資料的雜湊值,即訊息摘要,可以檢驗資料的完整性。
用大白話來說,任何一段資料應該都和人一樣是唯一的,唯一的標識是什麼,人類的話目前就是指紋,而資料的指紋是什麼呢?沒錯,就是訊息摘要演算法產生的這一段String。比如我們在註冊網站的時候,客戶端向伺服器傳輸的,應該是我們輸入的密碼進行訊息摘要處理後的內容,這樣就算伺服器被攻破,Hack也無法知道使用者真實的密碼是什麼。不過有說現在MD5和SHA已經被攻破了,具體大家可以谷歌。
1、MD5

?
123456789101112131415161718192021222324252627282930313233343536373839package com.amuro.strategy.message_digest;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import org.apache.commons.codec.binary.Hex;import com.amuro.strategy.IStrategy;/*** 訊息摘要演算法* @author Amuro**/public class MD5Strategy implements IStrategy{public String encode(String src){try{MessageDigest md = MessageDigest.getInstance("MD5");byte[] encodeBytes = md.digest(src.getBytes());return Hex.encodeHexString(encodeBytes);}catch (NoSuchAlgorithmException e){e.printStackTrace();}return null;}public String decode(String src){throw new RuntimeException("MD5 no decode");}}

2、SHA

相關推薦

Java常用到的加密方式

加密,是以某種特殊的演算法改變原有的資訊資料,使得未授權的使用者即使獲得了已加密的資訊,但因不知解密的方法,仍然無法瞭解資訊的內容。大體上分為雙向加密和單向加密。雙向加密:分為對稱加密和非對稱加密(有些資料將加密直接分為對稱加密和非對稱加密)。雙向加密大體意思就是明文加密後形

總結Java常用到的加密技術和程式碼

加密,是以某種特殊的演算法改變原有的資訊資料,使得未授權的使用者即使獲得了已加密的資訊,但因不知解密的方法,仍然無法瞭解資訊的內容。大體上分為雙向加密和單向加密,而雙向加密又分為對稱加密和非對稱加密(有些資料將加密直接分為對稱加密和非對稱加密)。 雙向加密大體意思就是明文加密後形成密文,可以通過

PHP密碼的加密方式

算法 格式 最大 salt 原因 能夠 媒體 put title 1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 參數 str -- 原始字符串。 raw_output -- 如果可

android hxgsecurity 常用的集中加密方式封裝

hxgsecurity 引用方式 allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { impl

常用的資料加密方式

常用加密方式 Base64 Sha1(Secure Hash Algorithm) (非對稱加密) Sha256(非對稱加密) Sha512(非對稱加密) MD5(Message Digest Al

java時間類的使用和區別

java.util.Date java.sql.Date   java.sql.Time   java.sql.Timestamp java.text.SimpleDateFormat java.util.Calendar java.u

java學習-排序及加密簽名時資料排序方式 十大經典排序演算法(動圖演示) Java Comparator字元排序(數字、字母、中文混合排序) 編寫高質量程式碼:改善Java程式的151建議(第5章:陣列和集合___建議70~74)

排序有兩種 1. 類實現comparable介面呼叫List.sort(null)或Collections.sort(List<T>)方法進行排序 jdk內建的基本型別包裝類等都實現了Comparablel介面,預設是使用自然排序,即升序排序 自定義類實現Comparable介面必須要實現c

Java常用加密方式

加密,是以某種特殊的演算法改變原有的資訊資料,使得未授權的使用者即使獲得了已加密的資訊,但因不知解密的方法,仍然無法瞭解資訊的內容。 加密大體上分為雙向加密和單向加密,雙向加密又分為對稱加密和非對稱加密 ------------------------------

java常用的2中加密密碼方式MD5和Encrypt

Encrypt方式加密 package com.cc.common.util;import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.Mes

java加載properties文件的中基本方式實現

alt user 通過 put main import port pac 技術 java加載properties文件的方式主要分為兩大類:一種是通過import java.util.Properties類中的load(InputStream in)方法加載; 另一種是通過

java讀取配置文件常用的四種方式

ng- wrap play 獲取值 position trac resource 基於 tom 配置文件 放置在src下面 obj.propertiesclassName=com.store.order.dao.impl.OrderDaoImpl方式一@Test p

js學習總結----深入擴展原型鏈模式常用種繼承方式

模式 temp 枚舉 又是 reat 缺點 解決 his obj 一、可枚舉和不可枚舉 for in 循環在遍歷的時候,默認的話可以把自己私有的和它所屬類原型上的擴展的屬性和方法都可以遍歷到,但是一般情況下,我們遍歷一個對象只需要遍歷私有的即可,我們可以使用以下的判斷進行處

【29】Python淺入常用模塊

python sys pickle time() 模塊 1.使用copy模塊copy模塊包含了制作對象的拷貝的函數。當寫程序時,有時候你可能需要多個相同的對象。這時候就可以用copy模塊進行拷貝。例如:我們創建一個Ad類,它有一個init函數,參數為name(名字),school_reco

JAVA中所有與集合有關的實現類都是這接口的實現類

length 數字 pack 有關 結構 [] rgs val 無序 JAVA中所有與集合有關的實現類都是這六個接口的實現類。 Collection接口:集合中每一個元素為一個對象,這個接口將這些對象組織在一起,形成一維結構。 List接口代表按照元素一定的相關順序

Android 常用的數據加密方式

變化 ati 本地 enc factor 由於 provide ... pair 前言 Android 很多場合需要使用到數據加密,比如:本地登錄密碼加密,網絡傳輸數據加密,等。在android 中一般的加密方式有如下: 亦或加密 AES加密 RSA非對稱加密 當然還有

C#幾種常用加密方式

read int ati htop 磁盤 tarray dem new lac 一、AES加密算法 AES算法基於排列和置換運算。排列是對數據重新進行安排,置換是將一個數據單元替換為另一個。AES 使用幾種不同的方法來執行排列和置換運算。 AES是一個叠代的、對稱

日常開發中的幾常用跨域處理方式

geo htm 網站 options https ss代理 write npm 服務端 設置express代理請求 在基於vue-cli的項目中,在開發環境配置(config/dev.env.js)中設置代理,能夠將所有/apidomain開頭的請求都通過npm run d

阿里P8架構師談:成長為Java架構師必須突破的技術點

一、原始碼分析 原始碼分析是一種臨界知識,掌握了這種臨界知識,能不變應萬變,原始碼分析對於很多人來說很枯燥,生澀難懂。 原始碼閱讀,我覺得最核心有三點:技術基礎+強烈的求知慾+耐心。 我認為是閱讀原始碼的最核心驅動力。我見到絕大多數程式設計師,對學習的態度,基本上就是這幾個層次(很偏激哦

Java架構-SOA中springmvc中restful服務的資料許可權加密方式分享

restful中資料許可權加密方式有很多種,特別是針對於request json的方式加密,這裡詳細介紹了SOA中針對於get、post資料加密方式,保證資料傳輸中的安全性: Java程式碼 到此結束!! 我這邊會將近期研發的spring cloud微服務雲架

零基礎學習Java程式設計師最高效的建議

零基礎學習Java程式設計師最高效的六個建議 零基礎學習Java程式設計師最高效的六個建議 零基礎學習Java程式設計師最高效的六個建議 知識改變命運,對於Java程式設計師來說,技術不斷更新,只有及時充電,才能不被市場淘汰。今天為大家分享Java程式設計師學習的6個小技巧。 1、一