常見加密方式
前言
提示:這裡可以添加本文要記錄的大概内容:
例如:随着人工智能的不斷發展,機器學習這門技術也越來越重要,很多人都開啟了學習機器學習,本文就介紹了機器學習的基礎内容。
提示:以下是本篇文章正文内容,下面案例可供參考
一、對稱加密
采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
示例
我們現在有一個原文3要發送給B
設定密鑰為108, 3 * 108 = 324, 将324作為密文發送給B
B拿到密文324後,使用324/108 = 3 得到原文
常見加密算法
DES : Data Encryption Standard,即資料加密标準,是一種使用密鑰加密的塊算法,1977年被美國聯邦政府的國家标準局确定為聯邦資料處理标準(FIPS),并授權在非密級政府通信中使用,随後該算法在國際上廣泛流傳開來。
AES : Advanced Encryption Standard, 進階加密标準,在密碼學中又稱Rijndael加密法,是美國聯邦政府采用的一種區塊加密标準。這個标準用來替代原先的DES,已經被多方分析且廣為全世界所使用。
特點
1.加密速度快, 可以加密大檔案
2.密文可逆, 一旦密鑰檔案洩漏, 就會導緻資料暴露
3.加密後編碼表找不到對應字元, 出現亂碼
4.一般結合Base64使用
二、DES加密
示例代碼 des加密算法
Cipher :文檔
https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html#getInstance-java.lang.String代碼如下(示例):
package com.atguigu.desaes;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* @author JsonHao😋
* @date 2020年9月11日 下午8:58:47
*/
public class DesAesDemo {
public static void main(String[] args) throws Exception{
// 原文
String input = "矽谷";
// des加密必須是8位
String key = "123456";
// 算法
String algorithm = "DES";
String transformation = "DES";
// Cipher:密碼,擷取加密對象
// transformation:參數表示使用什麼類型加密
Cipher cipher = Cipher.getInstance(transformation);
// 指定秘鑰規則
// 第一個參數表示:密鑰,key的位元組數組
// 第二個參數表示:算法
SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
// 對加密進行初始化
// 第一個參數:表示模式,有加密模式和解密模式
// 第二個參數:表示秘鑰規則
cipher.init(Cipher.ENCRYPT_MODE,sks);
// 進行加密
byte[] bytes = cipher.doFinal(input.getBytes());
// 列印位元組,因為ascii碼有負數,解析不出來,是以亂碼
// for (byte b : bytes) {
// System.out.println(b);
// }
// 列印密文
System.out.println(new String(bytes));
}
}
密鑰是6個位元組,DES加密算法規定,密鑰key必須是8個位元組,是以需要修改上面key,改成key=“12345678”
修改 密鑰 key = “12345678” ,再次運作 ,出現亂碼是因為對應的位元組出現負數,但負數,沒有出現在 ascii 碼表裡面,是以出現亂碼,需要配合base64進行轉碼
使用 base64 進行編碼
base64導包的時候,需要注意 ,别導錯了,需要導入 apache 包
運作程式