MD5 與 Base64一起使用 加密,計算原理
加密原文:
1234
加密後的結果:
gdyb21LQTcIANtvYMT7QVQ==
22位(不包括等於號)
123456
4QrcOUm6Wau+VuBX8g+IPg==
如何計算
1.使用MD5,取得資訊摘要
1234對應的資訊摘要如下
[-127, -36, -101, -37, 82, -48, 77, -62, 0, 54, -37, -40, 49, 62, -48, 85]
一共 16 byte
16*8=128
128%6=2
21餘2
2.使用Base64再次處理
1.將每三個位元組分成一組,一共24個二進位制位:3*8=24
2.將這24個二進位制位分成4組,每組有6個二進位制位:24/4=6
3.在每組前加兩00,擴充套件成32個二進位制位,即4個位元組:4*(6+2)=32
4.根據下面的編碼表,得到擴充套件後每個位元組的對應符號,就是Base64的編碼值
注意:
1.因為轉換後的每個字元的最高兩位都是0,所以實際有效位數是6位,
也就是26=64個字元就可以覆蓋所有的編碼。
2.如果剩下的字元不足3個位元組,則用0填充,輸出字元使用"=",
因此編碼後輸出的文字末尾可能會出現1或2個"="。
3.因為Base64將3個位元組轉化成4個位元組,因此Base64編碼後的文字,
會比原文字大出三分之一左右。
補=的規律:
(如果N*8%6後餘2個二進位制位,就補2個=,餘4個二進位制位就補一個=,整除不補)
剩餘兩位 ,2*8=16 % 6 結果為(餘數為) 4
剩餘一位,1*8=8 %6 結果為(餘數為) 2
前三位對應的二進位制(正數的補碼)
-127
10000001
-36
11011100
-101
10011011
轉化為四個字元(3*8bit=4*6bit)
100000 ⇒32 ⇒g
011101 ⇒29 ⇒d
110010 ⇒50 ⇒y
011011 ⇒27 ⇒b
補充說明
MD5是一種資訊摘要演算法,並不是加密演算法
相關知識
1.負數二進位制表示
正數對應的反碼
反碼加1,取得補碼
補碼就是負數的二進位制表示
2.base64編碼表
索引 | 對應字元 | 索引 | 對應字元 | 索引 | 對應字元 |
索引 |
對應字元 |
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | ||
14 | O | 31 | f | 48 | w | ||
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
package com.accenture.ams.lms.util;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
@SuppressWarnings("restriction")
public class MD5Util {
/**
* 利用MD5進行加密
*
* @param str
* 待加密的字串
* @return 加密後的字串
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static String EncoderByMd5(String str) {
if (str == null) {
return null;
}
try {
// 確定計算方法
MessageDigest md5 = MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
// 加密後的字串
return base64en.encode(md5.digest(str.getBytes("utf-8")));
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
return null;
}
}
}
相關推薦
MD5 與 Base64一起使用 加密,計算原理
加密原文: 1234 加密後的結果: gdyb21LQTcIANtvYMT7QVQ== 22位(不包括等於號) 123456 4QrcOUm6Wau+VuBX8g+IPg== 如何計算 1.使用MD5,取得資訊摘要 1234對應的資訊摘要如下 [-127, -36
【轉】JavaScript MD5 與 Java MessageDigest 加密後的值相同
cda padding highlight xe7 net abs algorithm urn -a function integer(n) { return n%(0xffffffff+1); } function shr(a,b) { a=integer(a);
什麽是硬件加密與軟件加密,有什麽區別?
次數 軟件 一起 進行 通過 定義 硬件 參數 小型 硬件加密與軟件加密的定義 1、硬件加密是通過專用加密芯片或獨立的處理芯片等實現密碼運算。將加密芯片、專有電子鑰匙、硬盤一一對應到一起時,加密芯片將把加密芯片信息、專有鑰匙信息、硬盤信息進行對應並做加密運算,同時寫入硬盤的
關於base64前端加密,後端解密
公司做的系統是給某公司內網的系統。做了一個滲透測試。提出一點漏洞,關於使用者名稱和密碼在傳輸中是用明文傳輸的,但後臺接到後已經做了MD5加密進行校驗而且還是內網,一般這個是沒問題的。但提出了漏洞就改唄,加個密。思路是前端加密,後端解密。 前端 <script sr
StringBuffer與StringBuilder的區別,實現原理和擴容
StringBuffer與StringBuilder的區別,及實現原理 區別 1、StringBuffer 與 StringBuilder 中的方法和功能完全是等價的, 2、只是StringBuffer 中的方法大都採用了 synchronized 
MD5 與 SHA 在 Delphi 中函數實現,加密密碼
edi 簡單 必須 .cn com message ring idg ash MD5 與 SHA 在 Delphi 中函數實現。 為了加密密碼,必須使用一種算法,查詢資料,比較好的方法是使用:MD5等算法,參考:Delphi XE8 支持MD5 第一種方式是:引用 Syst
加密演算法:資料是四位的整數對其加密規則如下:每位數字都加上5,然後用和與10求餘後的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換,計算加密後的整數。
程式碼如下: import java.util.Scanner; public class ji { public static void main(String[]args){ Scanner s=new Scanner(System.in); System.
js進行MD5加密(含中文),與後臺JAVA加密之後結果不同(解決)
開發小程式過程中與後臺進行介面溝通,前期介面經過MD5加密和AES加密之後,後臺進行解密。今天出現一種情況,我前臺加密之後的md5串與後臺加密不同,後臺發現可能是帶用中文的原因,這是加密之前的串:address=北京市朝陽區日壇北街33號C口&defult=1&
CryptoJS值JavaScript加密演算法,sha, md5, rc4, base64, aes
支援的演算法包括:MD5,SHA-1,SHA-256,AES,Rabbit,MARC4,HMAC,HMAC-MD5,HMAC-SHA1,HMAC-SHA256,PBKDF21.2.var CryptoJS = require("cryptojs");CryptoJS.require.Hmac(); //如果需
delphi MD5加密,BASE64加解密
hash 單元 ext 應該 form proc free 第三方 delphi MD5需要引入system.Hash,BASE64需要引入System.NetEncoding,這兩個單元應該只有高版本的DELPHI IDE才有(貌似XE5以上版本才有)。如果是D7的話,找
記JAVA內的MD5加密與Base64加密解密
之前都是在百度找工具類複製貼上,今天偶然發現可以用spring內建的工具類及maven導包等方式來解決加密問題,因此做個記錄。
base64加密和解碼原理和代碼
先來 自動 clas enter 緩沖區 urn rar col his Base64編碼,是我們程序開發中經常使用到的編碼方法。它是一種基於用64個可打印字符來表示二進制數據的表示方法。它通常用作存儲、傳輸一些二進制數據編碼方法!也是MIME(多用途互聯網郵件擴展,主要用
【雲安全與同態加密_調研分析(6)】雲計算及雲安全主流體系架構與模型——By Me
不同的 同態 示意圖 提供者 nis 管理 ati 分享 style 雲計算及雲安全的主流體系架構與模型 1. 雲計算主流安全參考模型 1.1 雲計算安全參考模型
MD5加密算法原理(含代碼)以及SHA算法相關信息
核心 但是 加密 不支持 .com about tran temp get 轉載: http://blog.csdn.net/forgotaboutgirl/article/details/7258109 java代碼部分 親測通過。 這裏 就 只貼一下代碼吧 。 動作只有
雲計算與大數據時代,生態效率是數字化轉型的基礎
表示 幫助 images 不同 HA 性能 運行 安全 車上 請輸入描述如今,數字化增長速度遠超企業的想象力。IDC報告指出,到2020年,50%的中國2000強制造業企業,將會依靠數字化平臺來增加對生態系統和體驗的投資,並支持其總收入的30%。從全球來看,去年67%的全球
雲計算與大數據基礎,雲計算視頻教程
計算平臺 統計 互聯 計算機 需求 新興 時間 聯網 硬件 雲計算技術是硬件技術和網絡技術發展到一定階段而出現的一種新的技術模型,雲計算並不是對某一項獨立技術的稱呼,而是對實現雲計算模式所需要的所有技術的總稱。 雲計算技術的內容很多:包括分布式計算技術、虛擬化技術、網絡技術
數據加密--詳解 RSA加密算法 原理與實現
pri mir 對稱加密 模運算 速度 探討 進制 成績 分析 RSA算法簡介 RSA是最流行的非對稱加密算法之一。也被稱為公鑰加密。它是由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在19
加密算法(DES,AES,RSA,MD5,SHA1,Base64)比較和項目應用(轉載)
and tcp 認證 sha1 http 用兩個 col token 初級 加密技術通常分為兩大類:"對稱式"和"非對稱式"。 對稱性加密算法:對稱式加密就是加密和解密使用同一個密鑰。信息接收雙方都需事先知道密匙和加解密算法且其密匙是相同的,之後便是對數據進行加解密了。對
合作伙伴、客戶與微軟一起,成為數字化轉型“三胞胎”
在廣東長隆野生動物園有全世界唯一的大熊貓三胞胎“萌帥酷”,2017年的時候有5000人為大熊貓三胞胎慶祝了3歲生日。2016年的時候,廣州迅易科技有限公司作為微軟合作伙伴,與微軟一起到廣東長隆野生動物園交流,當時提出能不能用人工智慧識別長隆的動物,特別是大熊貓三胞胎,這相比於二維碼導遊來說,能為遊客帶來更多樂
合作夥伴、客戶與微軟一起,成為數字化轉型“三胞胎”
人才培養 http 豐田 cloud 創新 dff 專業服務 雲端 問題 在廣東長隆野生動物園有全世界唯一的大熊貓三胞胎“萌帥酷”,2017年的時候有5000人為大熊貓三胞胎慶祝了3歲生日。2016年的時候,廣州迅易科技有限公司作為微軟合作夥伴,與微軟一起到廣東長隆野生動物