吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 907|回复: 0
收起左侧

[Android 讨论] 算法基础(对称加密算法)

[复制链接]
Chenda1 发表于 2022-4-3 13:37
本帖最后由 18077484116 于 2022-4-3 13:54 编辑

算法基础(消息摘要算法)https://www.52pojie.cn/thread-1613919-1-1.html(出处: 吾爱破解论坛)

对称加密算法
加密、解密使用同一密钥,效率高,密钥易被窃取,需要一个安全的信道来传输对称密钥


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();
}

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();

}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 21:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表