最近在研究區塊鏈裏的一些加密算法,用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) | 密碼長度有範圍可選 |
其中常見的加密模式
有以下幾種
ECB
(Electronic Codebook Book, 電碼本模式)表示將明文分成若干小段, 然後對每小段進行加密
CBC
(Cipher Block Chaining, 密碼分組鏈接模式)表示先將明文切分成若干小段,然後每一小段與初始塊或者上一段的密文段進行異或運算後,再與密鑰進行加密
其中常見的填充規則
有以下幾種
大部分情況下,明文並非剛好N位的倍數。對於最後一個分組,如果長度小於N位,則需要用數據填充至N位
這裏不做詳細闡述
Cipher類裏面常用到的方法
修飾符與返回值 | 方法名(不帶參數) | 說明 |
---|---|---|
void | init() |
使用密鑰和一組算法參數初始化此密碼 |
static Cipher | getInstance() |
返回Cipher實現指定轉換的對象 |
byte[ ] | doFinal() |
完成多部分加密或解密操作,具體取決於此密碼的初始化方式 |
… | … | …更多請查看官方API… |
一些示例代碼
示例代碼都丟到Gitee上去了, 有興趣的可以點擊查看