Chenda1 发表于 2022-4-3 13:37

算法基础(对称加密算法)

本帖最后由 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]
查看完整版本: 算法基础(对称加密算法)