Java中的javax.crypto.Cipher類

最近在研究區塊鏈裏的一些加密算法,用Java簡單實現了一下,發現部分算法都是通過javax.crypto.Cipher類來完成的,特地寫一篇文章介紹一下這個類。

類的定義和初始化

javax.crypto.Cipher類是從jdk1.4就開始引入,所屬jdk拓展包Java Cryptographic Extension(JCE)框架,該框架主要用於加密解密和密碼功能.其代碼定義如下:

密碼 = Cipher.getInstance(類型)

其中 類型 參數有兩種寫法:
1. "算法/模式/填充"
2. "算法"

目前已支持的算法

總共支持以下加密算法: AES / DES / DESede / RSA

類型 密碼長度 說明
AES/CBC/NoPadding 128 AES算法的CBC模式實現
AES/CBC/PKCS5Padding 128 AES算法的CBC模式實現, 並用PKCS5Padding規則填充
AES/ECB/NoPadding 128 AES算法的ECB模式實現
AES/ECB/PKCS5Padding 128 AES算法的ECB模式實現, 並用PKCS5Padding規則填充
DES/CBC/NoPadding 56
DES/CBC/PKCS5Padding 56
DESede/CBC/NoPadding 168
DESede/CBC/PKCS5Padding 168
DESede/ECB/NoPadding 168
DESede/ECB/PKCS5Padding 168
RSA/ECB/PKCS1Padding (1024, 2048) 密碼長度有範圍可選
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048) 密碼長度有範圍可選
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048) 密碼長度有範圍可選

其中常見的加密模式有以下幾種

  1. ECB(Electronic Codebook Book, 電碼本模式)表示將明文分成若干小段, 然後對每小段進行加密
    在這裏插入圖片描述
  2. CBC(Cipher Block Chaining, 密碼分組鏈接模式)表示先將明文切分成若干小段,然後每一小段與初始塊或者上一段的密文段進行異或運算後,再與密鑰進行加密
    在這裏插入圖片描述

其中常見的填充規則有以下幾種

大部分情況下,明文並非剛好N位的倍數。對於最後一個分組,如果長度小於N位,則需要用數據填充至N位
這裏不做詳細闡述

Cipher類裏面常用到的方法

修飾符與返回值 方法名(不帶參數) 說明
void init() 使用密鑰和一組算法參數初始化此密碼
static Cipher getInstance() 返回Cipher實現指定轉換的對象
byte[ ] doFinal() 完成多部分加密或解密操作,具體取決於此密碼的初始化方式
…更多請查看官方API

一些示例代碼

示例代碼都丟到Gitee上去了, 有興趣的可以點擊查看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章