des加密+base64编码,base64解码+des解密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: des加密+base64编码,base64解码+des解密

des简单介绍

des对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法。

DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,很轻松即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现。


PS:des被证明是可以破解的,明文+密钥=密文,这个公式只要知道任何两个,就可以推导出第三个,在已经知道明文和对应密文的情况下,通过穷举和暴力破解是可以破解des的。


注意:des加密和解密过程中,密钥长度都必须是8的倍数

base64简单介绍

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。


base64编码:把二进制数据转为字符;

base64解码:把字符转为二进制数据;

运行效果图

TestActivity.java

package top.gaojc;

import top.gaojc.util.DataEncryptionUtil;

public class MainActivity extends Activity {

    private String str = "迪迦,yyds,永远相信光!";
    private String s;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        findViewById(R.id.test).setOnClickListener(v -> {
          //加密操作
          s = DataEncryptionUtil.desEncrypt(str);
            System.out.println("原数据:" + str);
            System.out.println("加密后:" + s);
            /*
            //解密操作
            s = DataEncryptionUtil.desDecode(str);
            System.out.println("原数据:" + str);
            System.out.println("解密后:" + s);
            */
        });
    }
    
}

DataEncryptionUtil.java

package top.gaojc.util;

import android.util.Base64;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

//数据加密工具类
public class DataEncryptionUtil {

    private static final String ENCRYPT_KEY = "12345xyz";//8位密钥
    private static final String DES = "DES";

    /**
     * des加密 + base64编码
     */
    public static String desEncrypt(String data) {
        String resultData = null;
        try {
            // des算法要求有一个可信任的随机数源
            SecureRandom random = new SecureRandom();
            // 创建DESKeySpec对象
            DESKeySpec desKeySpec = new DESKeySpec(ENCRYPT_KEY.getBytes());
            // 创建密钥工厂
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
            // 将DESKeySpec对象转换成SecretKey对象
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            // Cipher对象完成加密操作
            Cipher cipher = Cipher.getInstance(DES);
            // 用密钥初始化Cipher对象
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
            // des数据加密
            byte[] bytesData = cipher.doFinal(data.getBytes("UTF-8"));
            // 进行Beas64编码处理
            resultData = Base64.encodeToString(bytesData, Base64.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultData;
    }


    /**
     * base64解码 + des解密
     */
    public static String desDecode(String data) {
        String resultData = null;

        try {
            // base64解码
            byte[] bytes = Base64.decode(data, Base64.DEFAULT);
            // des算法要求有一个可信任的随机数源
            SecureRandom random = new SecureRandom();
            // 创建一个DESKeySpec对象
            DESKeySpec desKeySpec = new DESKeySpec(ENCRYPT_KEY.getBytes());
            // 创建一个密钥工厂
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
            // 将DESKeySpec对象转换成SecretKey对象
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            // Cipher对象完成解密操作
            Cipher cipher = Cipher.getInstance(DES);
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.DECRYPT_MODE, secretKey, random);
            // 解密
            byte[] bytesData = cipher.doFinal(bytes);
            resultData = new String(bytesData);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultData;
    }

}
目录
相关文章
|
2月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
|
5月前
|
Go 数据安全/隐私保护
go 基于gin编写encode、decode、base64加密接口
go 基于gin编写encode、decode、base64加密接口
48 2
|
3月前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
169 1
|
5月前
|
存储 算法 安全
Java中的DES和3DES加密算法详解
Java中的DES和3DES加密算法详解
|
5月前
|
存储 Java 数据处理
Java的Base64加密解密详解
Java的Base64加密解密详解
|
5月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
4月前
|
安全 程序员 网络安全
编码之舞:我的编程技术感悟网络安全与信息安全:漏洞、加密技术及安全意识的探讨
在数字世界的广阔舞台上,编程技术如同一种精确而优美的舞蹈。它不仅要求逻辑的严密和技术的精湛,还需要创新思维和持续学习的热情。本文将分享作者在编程旅程中的个人感悟,探讨如何通过实践、学习和反思不断提升编程能力,并在技术探索中找到乐趣和成就感。 在数字化时代,网络安全和信息安全已成为全球关注的焦点。随着网络攻击手段的不断升级,如何保护个人和企业的数据安全成为了一个亟待解决的问题。本文将深入探讨网络安全漏洞的产生原因、加密技术的应用以及提升安全意识的重要性。通过分析具体案例,我们将揭示网络安全领域的最新发展趋势,并提供实用的防护策略,帮助读者构建更为坚固的安全防线。
|
5月前
|
Java C# 数据安全/隐私保护
|
4月前
|
C# 数据安全/隐私保护
Des加密和解密
Des加密和解密
49 0
|
6月前
|
存储 算法 安全
加密解密(DES)
加密解密(DES)