Base64 加密, 这个其实不可以算作加密方法,它可以看作是一种编码方式,它的用途只是二进制数字和字符串进行相互转化。

Base64是网络上最常见的用于传输 8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法。Base64一般用于在 HTTP协议下传输二进制数据,由于 HTTP协议是文本协议,所以在 HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。

MD5加密 散列函数计算,一种不安全的加密算法,通常用于账号密码的加密,但是一般都需要加盐处理,单纯的MD5的加密后的字符串可以被破解,或者通过字典查出。

java 实现base64加解密:

//Base64 加解密//编码加密String encodeStr = Base64.getEncoder().encodeToString(str.getBytes("UTF-8"));System.out.println("Base64加密后的字符串为:" + encodeStr);//解码解密String decoderStr = new String(Base64.getDecoder().decode(encodeStr), StandardCharsets.UTF_8); //// 推荐使用StandardCharsets类指定System.out.println("Base64解密后的字符串为" + decoderStr);

对称加密算法:DES、AES

DES算法加密的安全等级相对较低,通过同一个密钥进行加密解密。

Java实现DES加解密

 /*** 偏移变量,固定占8位字节*/private final static String IV_PARAMETER = "12345678";/*** 密钥算法*/private static final String ALGORITHM = "DES";/*** 加密/解密算法-工作模式-填充模式*/private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";/*** 默认编码*/private static final String CHARSET = "utf-8";
/*** 生成key** @param password* @return* @throws Exception*/private static Key generateKey(String password) throws Exception {DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);return keyFactory.generateSecret(dks);}/*** DES加密字符串** @param password 加密密码,长度不能够小于8位* @param data 待加密字符串* @return 加密后内容*/public static String encrypt(String password, String data) {if (password == null || password.length() < 8) {throw new RuntimeException("加密失败,key不能小于8位");}if (data == null) {return null;}try {Key secretKey = generateKey(password);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));//JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder//Android平台可以使用android.util.Base64return new String(Base64.getEncoder().encode(bytes));} catch (Exception e) {e.printStackTrace();return data;}}/*** DES解密字符串** @param password 解密密码,长度不能够小于8位* @param data 待解密字符串* @return 解密后内容*/public static String decrypt(String password, String data) {if (password == null || password.length() < 8) {throw new RuntimeException("加密失败,key不能小于8位");}if (data == null) {return null;}try {Key secretKey = generateKey(password);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);} catch (Exception e) {e.printStackTrace();return data;}}public static void main(String[] args) throws UnsupportedEncodingException {String str = "hello Base64 啊啊ADCDEFG";//DES加解密String password = "abcDEF123";//默认的密钥,根据情况修改String encodeStrDes = encrypt(password, str);System.out.println("DES  加密后的字符串为: " + encodeStrDes);String decodeStrDes = decrypt(password, encodeStrDes);System.out.println("DES  解密后的字符串为: " + decodeStrDes);}

AES加密是一种安全性质比较高的加密算法,可以用作敏感数据的加密。从下图可以看到,AES对加密用的密钥都多次进行了轮转换,

Java实现AES加解密

 /*** 默认编码*/private static final String CHARSET = "utf-8";/*** 加解密算法/工作模式/填充方式*/private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";/*** 填充向量*/private static final String FILL_VECTOR = "1234560405060708";private static final String ENCODING = "GBK";private static final String KEY_ALGORITHM = "AES";
/*** 加密字符串** @param content 字符串* @param password 密钥KEY* @return* @throws Exception*/public static String encryptAES(String content, String password) {if (StringUtils.isAnyEmpty(content, password)) {return null;}byte[] raw = hex2byte(password);SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_ALGORITHM);Cipher cipher = null;try {cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);IvParameterSpec iv = new IvParameterSpec(FILL_VECTOR.getBytes());cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);byte[] anslBytes = content.getBytes(ENCODING);byte[] encrypted = cipher.doFinal(anslBytes);return byte2hex(encrypted).toUpperCase();} catch (Exception e) {}return null;}/*** 解密** @param content 解密前的字符串* @param password 解密KEY* @return* @throws Exception* @author cdduqiang* @date 2014年4月3日*/public static String decryptAES(String content, String password) {if (StringUtils.isAnyEmpty(content, password)) {return null;}try {byte[] raw = hex2byte(password);SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_ALGORITHM);Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);IvParameterSpec iv = new IvParameterSpec(FILL_VECTOR.getBytes());cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);byte[] encrypted1 = hex2byte(content);byte[] original = cipher.doFinal(encrypted1);return new String(original, ENCODING);} catch (Exception e) {}return null;}public static byte[] hex2byte(String strhex) {if (strhex == null) {return null;}int l = strhex.length();if (l % 2 == 1) {return null;}byte[] b = new byte[l / 2];for (int i = 0; i != l / 2; i++) {b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2), 16);}return b;}public static String byte2hex(byte[] b) {String hs = "";String stmp = "";for (int n = 0; n < b.length; n++) {stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));if (stmp.length() == 1) {hs = hs + "0" + stmp;} else {hs = hs + stmp;}}return hs.toUpperCase();}public static void main(String[] args) throws UnsupportedEncodingException {String str = "hello Base64 啊啊ADCDEFG";//AES加解密//必须为16位String key = "9230967890982316";//生成加密密钥String key2 = byte2hex(key.getBytes());System.out.println(key2);String encryptStr = encryptAES(str, key2);System.out.println(encryptStr);System.out.println(decryptAES(encryptStr, key2));}

RSA加密。典型的不对称加密算法,存在公钥和私钥。因为存在大量的运算,所以加解密的耗时会比对称加密算法更长。

Java实现Base64、DES、AES、RSA加解密以及加密方式之间的区别相关推荐

  1. [crypto]-51.1-python的aes加解密/rsa生成密钥对/rsa加解密/hmac加密

    直接上代码 import base64 from Crypto.Cipher import AES import random import sys import os import hmac fro ...

  2. 前后端java+vue 实现rsa 加解密与摘要签名算法

    RSA有两个密钥,一个是公开的,称为公开密钥:一个是私密的,称为私密密钥. 特点: 公开密钥是对大众公开的,私密密钥是服务器私有的,两者不能互推得出. 用公开密钥对数据进行加密,私密密钥可解密:私密密 ...

  3. SHA256withRSA签名,RSA加解密

    SHA256withRSA签名,RSA加解密 简介 加密.签名流程图 具体代码实现 简介 项目用到了加密相关知识,主要包括加解密和签名过程.文章用java简单实现这一过程的工具类.(不包括公私钥的生成 ...

  4. RSA加解密用途简介及java示例

    在公司当前版本的中间件通信框架中,为了防止非授权第三方和到期客户端的连接,我们通过AES和RSA两种方式的加解密策略进行认证.对于非对称RSA加解密,因为其性能耗费较大,一般仅用于认证连接,不会用于每 ...

  5. 程序猿成长之路番外篇之前后端加解密(rsa+aes混合加解密算法)

    今年国庆前夕接手一个外部项目,说是要保障接口数据安全,数据安全相对容易些,接口安全嘛emmmmm, 这个要考虑加解密算法.白名单之类的问题了.于是打算今天搞一期接口安全为题的成长之路番外篇. 为什么要 ...

  6. openresty 与 java RSA加解密

    上一篇搞定了openresty与java之间的aes加解密.这一篇就来说说openresty与java之间RSA的加解密.在测试的过程中.发现了与aes同样的问题.就是openresty支持的填充模式 ...

  7. Java中的RSA加解密工具类:RSAUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt;import com.mirana.frame.utils.log.LogUtils; ...

  8. 与非java语言使用RSA加解密遇到的问题:algid parse error, not a sequence

    遇到的问题 在一个与Ruby语言对接的项目中,决定使用RSA算法来作为数据传输的加密与签名算法.但是,在使用Ruby生成后给我的私钥时,却发生了异常:IOException: algid parse ...

  9. STM32F1做RSA,AES数据加解密,MD5信息摘要处理

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_31878855/article/ ...

最新文章

  1. 再见了, VS Code!
  2. java线程代码实现_Java 多线程代码实现讲解
  3. python处理表格很厉害么_Python读写Excel表格,就是这么简单粗暴又好用
  4. opencv 直方图反向投影
  5. Android内核剖析
  6. Spring Boot和Hibernate:打印查询和变量
  7. Building Roads(POJ-3625)
  8. java scheduletask_spring中定时任务taskScheduler的详细介绍
  9. 结构体,文件操作,指针,简单练习
  10. 2D Tookit (一) 精灵切割
  11. 感觉c语言入门经典看不懂,c语言入门经典怎么样_学c语言看什么书_c语言入门自学(3)...
  12. 中债估值 收益率_收债
  13. 311运动(冰箱与内裤)的由来
  14. Python亲戚计算器
  15. 云服务器数据丢失可以恢复吗?
  16. python编程midi键盘按键_Python中捕获键盘的方式详解
  17. 沈师PTA2021Java编程题复习题库
  18. mmdet3d纯视觉baseline之数据准备:处理waymo dataset v1.3.1
  19. python之购物车(详解list tupe 循环)
  20. python基础(持续更新)

热门文章

  1. 无聊吗,写个【飞机大战】来玩吧(下)
  2. CAD转PDF如何设置其为高质量黑白形式?
  3. 网易云音乐编码_为什么有那么多编码员音乐家?
  4. RT-Thread Studio 项目实战教程 | 快速打造一个桌面mini网络时钟
  5. 98% after emitting CopyPlugin问题
  6. LCD RGB 控制技术 时钟篇(上)
  7. 2019下半年的教师资格考试~学霸大佬们总结的记忆口诀涨分必备
  8. 1的1次方+2的2次方+3的3次方+...+n的n次方
  9. 计算机常用的颜色模式有,ps的颜色模式有哪些
  10. 解压缩zip文件的工具类