算法基础(对称加密算法)
本帖最后由 18077484116 于 2022-4-3 13:54 编辑算法基础(消息摘要算法)https://www.52pojie.cn/thread-1613919-1-1.html(出处: 吾爱破解论坛)
对称加密算法
加密、解密使用同一密钥,效率高,密钥易被窃取,需要一个安全的信道来传输对称密钥
https://static.52pojie.cn/static/image/hrline/1.gif
DES算法(JAVA)
算法 工作模式填充方式 备注
DES ECB、CBC、PCBC、
CTR、CTS、CFB、
CFB8至CFB128、OFB、
OFB8至OFB128
NoPadding、
PKCSSPadding、
ISO10126Padding
Java 6实现
DES 同上PKCS7Padding
ISO10126d2Padding
x932Padding
ISO7816d4Padding
ZeroBytePadding
Bouncy Castle实现
64位=8个字节
//实例化密钥
DESKeySpec desKey = new DESKeySpec("key".getBytes());
SecretKeyFactory key = SecretKeyFactory.getInstance("DES");----------->密钥单例获取不能有加密模式、填充方式
SecretKey secretKey= key.generateSecret(desKey);
//实例化加密
Cipher cipher= Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(1,secretKey );--------->1<加密模式>2<解密模式>,解密时的编码方式要和加密的相同,注意解密输出的编码方式。
//加密操作
byte[] res = cipher.doFinal( "明文".getBytes());
System.out.println( Base64.getEncoder().encodeToString(res));
BASE64加解码
getEncoder()和getDecoder()方法
String base64encodedString = Base64.getUrlEncoder().encodeToString("吾爱破解".getBytes("utf-8"));
System.out.println(base64encodedString);
System.out.println();
byte[] base64decodedBytes = Base64.getUrlDecoder().decode(base64encodedString);
System.out.println(new String(base64decodedBytes, "utf-8"));
DES算法(JS)
function DES(){
//解析密钥、明文<Hex、Base64、Latin1、Utf8(没中文结果相同)四种常见解析方式>
var key=CryptoJS.enc.Utf8.parse("key");
var data=CryptoJS.enc.Utf8.parse("dataKey");
//加密操作
var res=CryptoJS.DES.encrypt(data,key,{
//加密模式、填充方式
mode:CryptoJS.mode.ECB,
padding:CryptoJS.pad.Pkcs7--->可省略,默认Pkcs7
});
return res.toString();
}
https://static.52pojie.cn/static/image/hrline/1.gif
AES算法
算法工作模式 填充方式 备注
AES ECB、CBC(iv向量)、PCB、
CTR、CTS、CFB、
CFB8至CFB128、OFB、
OFB8至OFB128 NoPadding、
PKCS5Padding、
ISO10126Padding Java 6实现若使用
256位密钥需要获得无
政策限制权限文件
AES同上PKCS7Padding、
ZeroBytePadding Bouncy Castle实现
128位 192位 256位
//实例化密钥
SecretKeySpec sKeySpec= new SecretKeySpec("key".getBytes(), "AES");
//实例化IV向量
AlgorithmParameterSpec iv= new IvParameterSpec("ivKey".getBytes());
//实例化加密
Cipher cipher= Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(1, sKeySpec,iv);
//加密操作
byte[] res = cipher.doFinal("明文".getBytes());
System.out.println( Base64.getEncoder().encodeToString(res));
AES算法(JS)
function AES(){
//解析密钥、明文<Hex、Base64、Latin1、Utf8(没中文结果相同)四种常见解析方式>
var key=CryptoJS.enc.Base64.parse("key");
var data=CryptoJS.enc.Base64.parse("dataKey");
var iv=CryptoJS.enc.Base64.parse("ivKey");
//加密操作
var res=CryptoJS.DES.encrypt(data,key,{
//加密模式、填充方式
iv:iv,
mode:CryptoJS.mode.CBC,
padding:CryptoJS.pad.Pkcs7--->可省略,默认Pkcs7
});
return res.toString();
}
页:
[1]