Java加密與解密:Base64算法

2020-12-25 itency

一段明文經過Base64加密後變得面目全非,又經過解密後恢復明文本來的面目,很有加密與解密算法的特徵。Base64不過並不是加密算法,僅僅是比較靠近加密算法。

Base64算法的由來

Base64算法主要最早用於解決電子郵件傳輸問題。在早期,由於歷史問題,電子郵件只允許傳輸ASCII碼字符。當傳輸非ASCII碼時,網關很可能將非ASCII碼的二進位位調整,即將非ASCII碼的8位二進位的最高位置0。當用戶收到郵件時,可想而知,收到的就是 一份亂碼的郵件。基於這個原因產生了Base64算法。

Base64算法的定義

Base64是一種基於64個字符的編碼算法,按照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位字節描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)。Base64編碼的思想是採用64個基本的ASCII碼字符對數據進行重新編碼。它將需要編碼的數據拆分成字節數組。以3個字節為一組。按順序排列24位數據,再把這24位數據分成4組,即每組6位。再在每組的的最高位前補兩個0湊足一個字節。這樣就把一個3位元組為一組的數據重新編碼成了4個字節。當所要編碼的數據的字節數不是3的整倍數,也就是說在分組時最後一組不夠3個字節。這時在最後一組填充1到2個0位元組。並在最後編碼完成後在結尾添加1到2個"="。

從以上編碼規則可以得知,通過Base64編碼,原來的3個字節編碼後將成為4個字節,即字節增加了33.3%。編碼後數據會比原來的數據略長,為原來的4/3倍。

在RFC2045文件中給出的字符映射表:

在這張映射表中,索引值為十進位,對應字符一共64個,這就是Base64名字的由來。映射表最後一個「=」等號字符是用來補位。

Base64算法實現原理

Base64算法主要是對給定的字符以與字符編碼(如ASCII字符,UTF-8碼)對應的十進位數為基準,做編碼操作:

將給定的字符串以字符為單位轉換為對應的字符編碼(如ASCII碼)。將獲得的字符編碼轉換為二進位碼。對獲得的二進位碼做分組轉換操作,每3個8位二進位碼為一組,轉換為每4個6位二進位碼為一組(不足6位時低位補0)。這是一個分組變化的過程,3個8位二進位碼和4個6位二進位碼的長度都是24位(3*8=4*6)。對獲得的4個6位二進位碼補位,向6位二進位碼添加2位高位0,組成4個8位二進位碼。將獲得的4個8位二進位轉換為十進位碼。將獲得的十進位碼轉換為Base64字符表中對應的字符。

ASCII碼字符編碼

字符串「A」進行Base64編碼,如下所示:

字符 AASCll 65 二進位碼 01000001 4-6二進位碼 010000 010000

4-8二進位碼 00010000 00010000

十進位碼 16 16

字符表映射碼 Q Q = =

字符串「A」經過Base64編碼後得到了「QQ==」這樣一個字符串。經過Base64編碼後的字符串未尾帶著2個等號。原因是原文的二進位碼長度不足24位,最終轉換為十進位時也不足4項,這時就需要用等號補位。經過Base64編碼後的字符串最多只會有2個等號:餘數 = 原文字節數 % 3

相關焦點

  • php幾種常用的加密解密算法
    內容原創本文給大家介紹php的三種常用的加密解密算法,有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。\r\n"; echo '第二個參數為TRUE sha1加密的字符串為:'.sha1($str,true) . "\n"; crypt() 將字符串用 UNIX 的標準加密 DES 模塊加密。這是單向的加密函數,無法解密。欲比對字符串,將已加密的字符串的頭二個字符放在 salt 的參數中,再比對加密後的字符串。
  • Java加密與解密:消息摘要算法MD5
    此外,關於MD4算的處理和MD2算法有很大的差別。但最終仍舊會獲得一個128為的散列值。MD4算法對後續消息摘要算法起到了推動作用,許多比較有名的消息摘要算法都是在MD4算法的基礎上發展而來的,如MD5、SHA-1、RIPE-MD和HAVAL算法等。
  • java安全學習-Code-Breaking Puzzles-javacon詳細分析
    ,解密的邏輯在BOOT-INF\classes\io\tricking\challenge\UserConfig.class,其中加密和解密調用主要為以下兩個函數 key,初始向量,以及密文,類SecretKeySpec根據提供的字節數組來生成指定算法的key,這裡生成AES加密的密鑰,類IvParameterSpec根據字節數組生成初始向量,Ciper類提供了java核心的加密解密算法體系,通過調用getInstance()方法我們就可以生成可以進行提供加密的對象,入口參數為我們需要使用的加密算法,以及對應的反饋模式以及填充模式,比如上面代碼中的Cipher.getInstance
  • JAVA開發中常用的四種加密方法
    base64加密工具類Bcrypt工具類二、加密測試MD5加密測試base64加密測試SHA加密測試BCrypt加密測試一、工具類1. md5加密工具類package 加密Tester.util;import java.security.MessageDigest
  • java最常用的幾種加密算法
    MD5MD5即Message-Digest Algorithm 5(信息-摘要算法5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流程式語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。廣泛用於加密和解密技術,常用於文件校驗。校驗?
  • Java利用DES / 3DES / AES這三種算法分別實現對稱加密
    2)編程就是算法和數據結構,算法和數據結構是編程的靈魂。 注意,這可不是我說的,是無數程式設計師總結的,話說的很實在也很精闢,若想長久可持續發展,多研究算法還是很有必要的,今天我給大家說說加密算法中的對稱加密算法,並且這裡將教會大家對稱加密算法的編程使用。包含DES、3DES和AES三種對稱加密算法的編程使用,乾貨滿滿。
  • 加密算法科普:des、aes加密、對稱、非對稱加密、Hash算法都是啥
    對稱密碼算法有時又叫傳統密碼算法、秘密密鑰算法或單密鑰算法,非對稱密碼算法也叫公開密鑰密碼算法或雙密鑰算法。對稱密碼算法的加密密鑰能夠從解密密鑰中推算出來,反過來也成立。在大多數對稱算法中,加密解密密鑰是相同的。它要求發送者和接收者在安全通信之前,商定一個密鑰。對稱算法的安全性依賴於密鑰,洩漏密鑰就意味著任何人都能對消息進行加密解密。只要通信需要保密,密鑰就必須保密。
  • Java 開發中常用的 4 種加密方法
    base64加密工具類3.Bcrypt工具類二、加密測試1. MD5加密測試2. base64加密測試3. SHA加密測試4.byteToHexString(byte b){ int n = b; if(n < 0){ n += 256; } int d1 = n / 16; int d2 = n % 16; return hexDigIts[d1] + hexDigIts[d2]; }}2. base64
  • 一文讀懂對稱加密算法、非對稱加密算法和Hash算法
    一、簡述常見的加密算法可以分成三類,對稱加密算法,非對稱加密算法和Hash算法。對稱加密指加密和解密使用相同密鑰的加密算法。對稱加密算法的優點在於加解密的高速度和使用長密鑰時的難破解性。常見的對稱加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES非對稱加密指加密和解密使用不同密鑰的加密算法,也稱為公私鑰加密。假設兩個用戶要加密交換數據,雙方交換公鑰,使用時一方用對方的公鑰加密,另一方即可用自己的私鑰解密。
  • DES加密算法
    (1)定義在對稱加密算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密算法處理後,使其變成複雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同算法的逆算法對密文進行解密,才能使其恢復成可讀明文。
  • 網絡安全加密——DES、AES、RSA、Base64、MD5加密原理介紹,代碼實現
    :關於DES 3DES加密解密原理不再介紹,現在已經用的不多,如果你的項目還在使用DES加密,還是趕快換吧,換做AES或者更強的非對稱RSA加密。>/** AES-ECB模式加密 @param key 密鑰支持128 192 256bit,16、24、32位元組,長度錯誤將拋出異常 */- (NSData *)aesECBEncryptWithDataKey:(NSData *)key;/* ECB模式解密,返回base64編碼
  • JAVA實現非對稱加密
    一、概述非對稱加密算法概述,非對稱主要是相對於對稱加密算法而言的,對稱加密算法有一個密鑰和一個解鑰,非對稱算法有一個公鑰和一個私鑰,這兩個共同組成一個解鑰,才能實現解密。DH:密鑰交換算法,算是非對稱加密算法的起源。RSA:基於因子分解,應用最廣,RSA是可以雙向加密的,私鑰加密,公鑰解密;公鑰加密,私鑰解密,是目前世界上使用最廣的非對稱加密算法。ELGamal:基於離散對數。ECC:橢圓曲線加密。
  • Java加密與解密:消息摘要算法SHA
    SHA算法基於MD4算法基礎之上,作為MD算法的繼任者,成為新一代消息摘要算法的代表。SHA與MD算法不同之處主要在於摘要長度,SHA算法的摘要長度更長,安全性更高。SHA算法家族目前共有SHA-0、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512五種算法,通常將後四種算法並稱為SHA-2算法。
  • JAVA實現對稱加密
    一、對稱加密算法-DES"BC"); generator.init(56); SecretKey secretKey = generator.generateKey();byte[] keyCode = secretKey.getEncoded();二、對稱加密算法
  • Java 常用的兩種加密原理
    加密定義:.1.對稱加密:需要對加密和解密使用相同密鑰的加密算法。由於其速度快,對稱性加密通常在消息發送方需要加密大量數據時使用。對稱性加密也稱為密鑰加密。所謂對稱,就是採用這種加密方法的雙方使用方式用同樣的密鑰進行加密和解密。密鑰是控制加密及解密過程的指令。算法是一組規則,規定如何進行加密和解密。加密的安全性不僅取決於加密算法本身,密鑰管理的安全性更是重要。因為加密和解密都使用同一個密鑰,如何把密鑰安全地傳遞到解密者手上就成重中之重的問題。
  • PHP編程實例:自定義函數實現簡單數字加密和解密算法
    加密和解密一般用於電子商務,但是一般的網站開發中也會用涉及到到加密和解密,特別是文件處理上,今天為大家講解一個自定義函數簡單的數字加密/解密算法實例。3、定義加密數字和解密數字的函數。4、調用自定義函數處理用戶輸入的數據,輸出加密數字和解密數字。
  • 對稱加密及AES加密算法
    2、對稱加密的工作過程 3、對稱加密的優點 4、對稱加密的兩大不足二、AES加密算法 1、什麼是AES加密算法及AES加密算法的形成過程 2、AES的加密流程(要理解AES的加密流程,會涉及到AES的五個關鍵詞:分組密碼體制、Padding、初始向量IV、密鑰、四種加密模式) 3、AES的加密原理(要理解AES的加密原理,會涉及到AES的四個關鍵詞:密鑰擴展、初始輪、重複輪、最終輪
  • Android 逆向 | 不是加密的 Base64
    ) * '='    return respdef decode(base64_str):    """    解碼base64字符串    :param base64_str:base64字符串    :return:解碼後的bytearray;若入參不是合法base64字符串,返回空bytearray    """
  • 禪宗加密算法漫談
    眾所周知,世界的金融基礎秩序的穩定,依賴於銀行使用的RSA加密算法。而這種算法最終也歸究於質因數分解。然而,有加密就永遠有解密,一種科學的、行之有效的解密行動總是伴隨著對暴力枚舉法的拋棄和突破。因為,對解密者而言,真正的障礙是暴力枚舉法本身。我們知道,加密永遠是一種方法,而破解如果永遠只能是暴力枚舉這種笨辦法,那麼從理論上加密就永遠比解密高一個維度,解密就永遠不可能取得成功。
  • 區塊鏈丨對稱加密算法
    在前面的文章中,有提到「對稱加密算法」,這是一種相對應用得比較早的加密算法之一,其技術也是比較成熟的。在執行對稱加密時,數據發出方將需要明文(之前的文章中有解釋)和加密密鑰一起輸入至加密算法中進行處理,使之變成更為複雜的加密密文,之後再將密文發布出去。