1.常用加密演算法
有對稱密碼,公鑰密碼,單向散列函式,數字簽名, 偽亂數生成器,
明文:是指沒有加密的文字(或者字串),加密之前的文字,
密文:加了密的的文字,
MDS演算法 :單向散列函式 SHA演算法: 單向散列函式,秒傳,
base64編碼與解碼:64個符號進行編碼,多媒體資訊追加到文本中,
64個符號:a到z,A到Z,0到9,- +或者/
對稱密碼
(最古老的)凱撒密碼:通過偏移來實作,比如偏移n位數 n=1 (hello就是ifmmp),
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* 工具類
* @author Admin
*
*/
public class Util {
/**
* 凱撒密碼加密
* @param msg 明文
* @return 密文
*/
public static String toCaesar(String msg) {
// 字串轉換成字符陣列
char[] data =https://www.cnblogs.com/firebet/p/msg.toCharArray();
// Arrays
System.out.println(Arrays.toString(data));
// 偏移(加密):把明文轉換為密文
// 每個字符偏移特定的位置:如love
// l,o,v,e
for (int i = 0; i < data.length; i++) {
// 對每個字符進行處理,偏移 1
// char c = data[i];
// 不是z的情況,才進行處理,標點符號除外
if((data[i] >='a' && data[i] <'z')
|| (data[i] >='A' && data[i] <'Z')
) {
data[i]++;
}
// z?如何偏移
if(data[i]=='z') {
data[i]='a';
}
if(data[i]=='Z') {
data[i]='A';
}
// todo,如果偏移是其他的值
}
// 回傳密文
return new String(data);
}
}
package com.newer.demo;
public class App {
public static void main(String[] args) {
// a后面是b,中后面?
// 中文 在UTF-8是 多個位元組
// String msg=" i love u - zoom ? ZOOM";
//
// String msgCaesar= Util.toCaesar(msg);
//
// System.out.println(msgCaesar);
}
}
控制臺輸出結果為:
[ , i, , l, o, v, e, , u, , -, , z, o, o, m, , ?, , Z, O, O, M]
j mpwf v - appn ? APPN
公鑰密碼(非對稱 RSA):加密與解密使用兩個不同的密鑰,
https:使用混合加密方式,
單向散列函式:不能解密,
確保資料的完整性,存盤用戶口令,
散列函式把輸入的內容(長度不限),生成固定長度的內容,訊息摘要,指紋,
md5
sha128
sha256
sha512
位元幣是散列演算法,區塊的摘要資訊
package com.newer.demo;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* 工具類
* @author Admin
*
*/
public class Util {
/**
* 單向散列函式,生成摘要資訊(數字指紋),程序不可逆(無法解密
* @param text 目標資料:字串,位元組陣列,檔案
* @return
*/
public static String toMD5(String text){
// 訊息摘要
try {
byte[] data= https://www.cnblogs.com/firebet/p/MessageDigest.getInstance("MD5").digest(text.getBytes());
// 位元組陣列轉換成16進制數
return new BigInteger(1,data).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
/**
*
* @param text
* @return
*/
public static String toSha256(String text){
// 訊息摘要
try {
byte[] data= https://www.cnblogs.com/firebet/p/MessageDigest.getInstance("SHA").digest(text.getBytes());
// 位元組陣列轉換成16進制數
return new BigInteger(1,data).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
}
package com.newer.demo;
public class App {
public static void main(String[] args) {
// MD5---->32
System.out.println(Util.toMD5(""));
System.out.println(Util.toMD5("love"));
System.out.println(Util.toMD5("i love you"));
System.out.println(Util.toMD5("這是一段文本內容...很長,很長...."));
// SHA256--->64
System.out.println(Util.toSha256(""));
System.out.println(Util.toSha256("love"));
System.out.println(Util.toSha256(" I love you"));
System.out.println(Util.toSha256("這是一段文本內容...很長,很長...."));
}
}
控制臺輸出結果為:
d41d8cd98f00b204e9800998ecf8427e
b5c0b187fe309af0f4d35982fd961d7e
459b9511a7f650ebd327889c45cc4e9b
6801cad5e0c2a026f3d562c2b4ea13cd
da39a3ee5e6b4b0d3255bfef95601890afd80709
9f2feb0f1ef425b292f2f94bc8482494df430413
f6de392817cbb574fa480f63fefc0b85f2f63c93
6c8ba80d95708c301b6228b2258eebc895bb9810
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/71814.html
標籤:其他
