玩CTF學密碼學1:base64加解碼

CTF密碼學1:base64加解碼

1、先上題目:

在這裏插入圖片描述
這是小良的第一道CTF的練習題。下載附件以後,就看到一串碼:
在這裏插入圖片描述
拿到這串碼,我也很懵逼。可是仔細分析一看,發現這串碼有它的特色:
全是數字、大寫字母、小寫字母組成,而後放到VS去跑一下,發現這個碼的長度是44
根據我學的密碼學知識,這個序列確定是讓我解碼,由於這個序列看起來很雜亂,應該是密文。然而能讓我密文解密成爲明文,我又沒獲得私鑰,那確定是對稱加密算法。若是是凱撒密碼,應該給我置換規則,因此應該也不是古典密碼那一塊。這個密碼是4的倍數、又只有大小寫字母和數字,那應該是base64加密。java

2、個人解決方案:Java程序解碼

import java.util.Base64;

public class base64 {
	static String src = "Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9";
	
	public static void main(String[] args) {
		
		/* 加密 */
// String Encode = Base64.getEncoder().encodeToString(src.getBytes());
// System.out.println(Encode);
		
		
		/* 解密 */
		byte[] Decode = Base64.getDecoder().decode(src);
		System.out.println(new String(Decode));
		
	}
	
}

這個Base64的庫在jdk裏是有的,須要去新增路徑配置一下。
在這裏插入圖片描述算法

3、學習base64加密算法

base64就是一種基於64個可打印字符來表示二進制數據的編碼方法。爲何不直接用ASCII碼呢?由於咱們輸入的字符可能有ASCII碼中不可見的字符,爲了徹底可見,就用了base64編碼。這種加密算法常常在對圖片、PDF文件加解密用到。markdown

3.一、base64加解密的算法步驟

對稱加密算法的密鑰其實就是一個加密算法準則,根據統一準則(密鑰),便可對明文加密、對密文解密。base64加密算法總的是這麼幾個步驟:
第一步:獲取明文信息的對應ASCii碼
第二步:獲取對應ASCii碼的字節碼(一個字節是八個比特)暨換算成八位二進制
第三步:換編碼格式,把組成的八位二進制編碼換成六位一組(思考爲何?)
第四步:再把六位一組的二進制編碼換算成十進制,再去base64密碼錶上查表
第五步:查表後組成密文,注意,最後補位的明文變成字符:’=’(怎麼補位?)ide

3.二、base64加解密的算法探源:

第一:爲何把八位二進制換算成六位二進制數?
由於一個字節是八位二進制,明文信息都是字符組成,一個字符是一個字節也就是八位。而後base64的密碼錶實際上就是一組鍵值對集合,其中key = {0, 1, 2, …, 63},因而乎,表示63的二進制編碼須要6位,因此最大隻須要6位,超過6位的表示也沒用,會溢出,也就是沒法表示!學習

第二:這個補位是什麼意思?怎麼補位?
假設明文的長度是L,那麼換算的八位二進制編碼的長度就是:8 * L,這個數必定可以被6所整除嗎?顯然是不必定的,因此須要對後面補0,並且這個補位,是一組一組的補,一組是8位 !直到總長度可以被6整除爲止。網站

3.三、base64的密碼錶:

在這裏插入圖片描述

3.四、舉個base64加密的例子:以"ABCD"爲例

第一步:從ASCii獲得對應值而且轉成8位二進制編碼
Src = 「ABCD」
A = 65 = 0100 0001
B = 66 = 0100 0010
C = 67 = 0100 0011
D = 68 = 0100 0100編碼

第二步:把8位二進制編碼變成6位,不足的地方補k組0,直到被6整除atom

16               20              9               3               17             0                 '='             '='
 010000       010100      001001      000011     010001    00[0000    0000][00    000000]

第三步:根據base64的密碼錶轉換:加密

密文M = 「QUJDRA==」spa

4、base64的轉換也有相應查詢網站:

base64查詢網址,不過不建議使用,建議思考

相關文章
相關標籤/搜索