13种加密与解密算法【一】

article/2025/10/11 4:00:33

这15种加密解密算法分别是:散列哈希[MD5、SHA1、CRC32],对称[DES,3DES(TDEA、Triple DES),AES、,Blowfish,RC4、RC5,IDEA],Base64、Rabbit、Escape。
【三种分类】
1、对称加密:密钥只有一个,解密、解密都是这个密码,加解密速度快,典型的对称加密有DES、AES、RC4等
2、非对称加密:密钥成对出现,分别为公钥和私钥,从公钥无法推知私钥,反之,从私钥也无法推知公钥,加密和解密使用不同的密钥,公钥加密需要私钥解密,反之,私钥加密需要公钥解密。非对称加密速度较慢,典型的非对称算法有:RSA,DSA,DSS.
3、Hash算法,这是一种不可逆的算法,它常用于验证数据的完整性。

【1、MD5加密解密】

md5是不可逆的,md5没有解密的方法,最好的反驳就是:数据源是无穷尽的,而 MD5密文是有限的。这里的加密解密是对md5算法先加密后解密,而不是对md5解密。
md5加密原理
MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

        // MD5加密,32位public static String MD5(String str) {MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");} catch (Exception e) {System.out.println(e.toString());e.printStackTrace();return "";}char[] charArray = str.toCharArray();byte[] byteArray = new byte[charArray.length];for (int i = 0; i < charArray.length; i++){byteArray[i] = (byte) charArray[i];}byte[] md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16){hexValue.append("0");}hexValue.append(Integer.toHexString(val));}return hexValue.toString();}

md5解密
MD5加密不可逆,怎么解密呢?记得wann yaosh吗,对就是那样的原理:只不过是大数据查询的一个碰撞而已,比如,有一台服务器存储了大量key以及key的MD5编码的信息,那么就可以拿着数据去进行比对。
【MD5小 demo】
public static void main(String args[]) {
String str = "Frozen——test:redant want tobe enrich";
//Md5加密
testMd5(str);

}
public static void testMd5(String str){System.out.println("MD5后:" + MD5(str));
}

13种加密与解密算法【一】

【2、Base64加密解密】

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
很简单的算法,没得说:
【Base64小 demo】

//Base64加密解密public static void base64(String str) throws Exception {byte[] bytes = str.getBytes();//Base64 加密String encoded = Base64.getEncoder().encodeToString(bytes);System.out.println("Base 64 加密后:" + encoded);//Base64 解密byte[] decoded = Base64.getDecoder().decode(encoded);String decodeStr = new String(decoded);System.out.println("Base 64 解密后:" + decodeStr);//另一种写法:String frozen = (new BASE64Encoder()).encodeBuffer(str.getBytes());System.out.println("另一种写法 加密后:" + frozen);String defrozen = new String((new BASE64Decoder()).decodeBuffer(frozen));System.out.println("另一种写法 解密后:" +  defrozen);}

13种加密与解密算法【一】

【3、对称之AES加密解密】

需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密,所谓对称加密就是加密和解密都是使用《同一个密钥》。
【AES加密过程】

/*** @param content 需要加密的内容* @param str 指定规则,用于产生密钥生成器* @return AES加密后* @throws Exception 异常*/public static String AESEncode1(String content, String str) throws Exception{//1.构造密钥生成器,指定为AES算法,不区分大小写KeyGenerator keygen=KeyGenerator.getInstance("AES");//2.根据str规则初始化密钥生成器//生成一个128位的随机源,根据传入的字节数组keygen.init(128, new SecureRandom(str.getBytes()));//3.产生原始对称密钥SecretKey original_key = keygen.generateKey();//4.获得原始对称密钥的字节数组byte [] raw=original_key.getEncoded();//5.根据字节数组生成AES密钥SecretKey key=new SecretKeySpec(raw, "AES");//6.根据指定算法AES自成密码器Cipher cipher = Cipher.getInstance("AES");//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEYcipher.init(Cipher.ENCRYPT_MODE, key);//8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码byte [] byte_encode=content.getBytes("utf-8");//9.根据密码器的初始化方式--加密:将数据加密byte [] byte_AES = cipher.doFinal(byte_encode);//10.将加密后的数据转换为字符串String AES_encode = new String(new BASE64Encoder().encode(byte_AES));System.out.println("对称之AES加密之后" + AES_encode);//11.将字符串返回return AES_encode;}

【AES 解密过程】

 /*** @param encodeRules 密钥规则,同加密一样。都是一样的规则* @param content 需要解密的内容* @return AES解密之后的内容* @throws Exception 异常*/public static String AESDncode(String encodeRules, String content) throws Exception{//1.构造密钥生成器,指定为AES算法,不区分大小写KeyGenerator keygen=KeyGenerator.getInstance("AES");//2.根据ecnodeRules规则初始化密钥生成器//生成一个128位的随机源,根据传入的字节数组keygen.init(128, new SecureRandom(encodeRules.getBytes()));//3.产生原始对称密钥SecretKey original_key=keygen.generateKey();//4.获得原始对称密钥的字节数组byte [] raw=original_key.getEncoded();//5.根据字节数组生成AES密钥SecretKey key=new SecretKeySpec(raw, "AES");//6.根据指定算法AES自成密码器Cipher cipher=Cipher.getInstance("AES");//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEYcipher.init(Cipher.DECRYPT_MODE, key);//8.将加密并编码后的内容解码成字节数组byte [] byte_content= new BASE64Decoder().decodeBuffer(content);//9进行解密byte [] byte_decode=cipher.doFinal(byte_content);String AES_decode = new String(byte_decode,"utf-8");System.out.println("对称之AES解密之后:"+ AES_decode);return AES_decode;}

13种加密与解密算法【一】
【对称之AES小 demo】

        String rule = "genzhe ganjuezou yongyuanbuhuitou";String afteraes = AESEncode(str, rule);AESDncode(rule, afteraes);

13种加密与解密算法【一】

【4、对称之DES加密解密】

【原理】DES使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行"异或"运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。
13种加密与解密算法【一】
【DES加密】

/*** 生成java.security.key* @param password 自定义密码规则【对称本质所在】* @return* @throws Exception*/private static Key generateKey(String password) throws Exception {//设置编码DESKeySpec dks = new DESKeySpec(password.getBytes("utf-8"));//密钥算法SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");return keyFactory.generateSecret(dks);}/*** DES加密字符串* @param IV_PARAMETER 偏移量 固定8位字节* @param password 加密密码* @param data 待加密字符串* @return*/public static String desencrypt(String IV_PARAMETER, 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("DES/CBC/PKCS5Padding");IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes("utf-8"));cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);byte[] bytes = cipher.doFinal(data.getBytes("utf-8"));//JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder//Android平台可以使用android.util.Base64String after =  new String(Base64.getEncoder().encode(bytes));System.out.println("对称之DES加密后的字符: "+ after);return after;} catch (Exception e) {e.printStackTrace();return data;}}

【DES解密】

/*** DES解密字符串* @param password 解密密码,长度不能够小于8位* @param data 待解密字符串* @param IV_PARAMETER 自定义密钥,对称的精髓所在* @return 解密后内容*/public static String desdecrypt(String IV_PARAMETER, 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("DES/CBC/PKCS5Padding");IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes("utf-8"));cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);String str = new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes("utf-8"))), "utf-8");System.out.println("对称之DES解密之后的字符串:"+ str);return str;} catch (Exception e) {e.printStackTrace();return data;}}

**【对称之DES小 demo】

 String afterdes = desencrypt("123asd45","qweqeqoieqeoiqeoiqoieqoie", str);desdecrypt("123asd45","qweqeqoieqeoiqeoiqoieqoie", afterdes);

13种加密与解密算法【一】

【对称之3DES加密解密】

为解决DES存在的问题,出现了3DES,也称为Triple DES。3DES为DES向AES过度的加密算法,它使用3条56位的密钥对数据进行三次加密。为了兼容普通的DES,3DES并没有直接使用 加密->加密->加密 的方式,而是采用了加密->解密->加密 的方式。
13种加密与解密算法【一】
【3DES加密】

 /*** 获取key* @param key* @return*/public static byte[] hex(String key){String f = DigestUtils.md5Hex(key);byte[] bkeys = new String(f).getBytes();byte[] enk = new byte[24];for (int i=0;i<24;i++){enk[i] = bkeys[i];}return enk;}/*** 3DES加密* @param key 密钥* @param srcStr 需要加密的字符串* @return*/public static String  encode3Des(String key, String srcStr){byte[] keybyte = hex(key);byte[] src = srcStr.getBytes();try {//生成密钥SecretKey deskey = new SecretKeySpec(keybyte, "DESede");//加密Cipher c1 = Cipher.getInstance("DESede");c1.init(Cipher.ENCRYPT_MODE, deskey);String pwd = (new BASE64Encoder()).encodeBuffer(c1.doFinal(src));System.out.println("对称之3DES加密后的字符串:"+pwd);return pwd;}catch(Exception e){e.printStackTrace();}return null;}

【3DES解密】

 /*** 3DES解密* @param key 加密密钥* @param desStr 需要解密的字符串* @return*/public static String decode3Des(String key, String desStr){byte[] keybyte = hex(key);try {byte[] src = (new BASE64Decoder()).decodeBuffer(desStr);//生成密钥SecretKey deskey = new SecretKeySpec(keybyte, "DESede");//解密Cipher c1 = Cipher.getInstance("DESede");c1.init(Cipher.DECRYPT_MODE, deskey);String pwd = new String(c1.doFinal(src));System.out.print("对称之3DES解密后的字符串:"+pwd);return pwd;}catch(Exception e){e.printStackTrace();}return null;}

【对称之3DES小 demo】

//key,随便写,怎么写都是对的String after3des = encode3Des("1qwew", str);decode3Des("1qwew", after3des);

13种加密与解密算法【一】


http://chatgpt.dhexx.cn/article/i2wY9lAo.shtml

相关文章

【2021最新版】Linux面试题总结(48道题含答案解析)

文章目录 1、绝对路径用什么符号表示&#xff1f;当前目录、上层目录用什么表示&#xff1f;主目录用什么表示? 切换目录用什么命令&#xff1f;2、怎么查看当前进程&#xff1f;怎么执行退出&#xff1f;怎么查看当前路径&#xff1f;3、怎么清屏&#xff1f;怎么退出当前命令…

linux操作系统期末考试题库

别光看点个赞呗 文档完整下载链接&#xff1a; w​​​​​​​w​​​​​​​https://download.csdn.net/download/weixin_59241300/87299684 1. cal命令 2.cat命令 3.cd命令 4.date命令 5.echo命令 6.grep命令 7.head 命令 8.ls 命令 9.touch 命令 10.more命令 …

Linux上机考试试题

Linux基础机考测试题 1、如果忘记登录密码&#xff0c;如何破解超级用户root的密码&#xff0c;并将密码改为redhat。&#xff08;操作过程抓图体现&#xff09; 开机在出现grub画面&#xff0c;按e键 用上下键选中第二项(类似于kernel /boot/vmlinuz-2.4.18-14 ro rootLABEL…

linux考试题库

&#xff08;Linux&#xff09;是一个自由、免费、开放的系统软件&#xff0c;支持多种硬件平台&#xff0c;多用户、多任务特点。 Linux操作系统是&#xff08;Linus Torvalds&#xff09;第一个开发的。 下列中&#xff08;单用户&#xff09;不是Linux的特点。 Linux一般…

Linux期末考试题库(超全)

文章目录 Linux期末考试题库选择题填空题简答题操作题 Linux期末考试题库 选择题 在创建Linux分区时&#xff0c;一定要创建&#xff08; D &#xff09;两个分区 A. FAT/NTFS  B. FAT/SWAP  C. NTFS/SWAP  D.SWAP/根分区 在Red Hat Linux 9 中&#xff0c;系统默…

虚拟机镜像文件高速下载方法之一

虚拟机镜像文件高速下载方法之一&#xff08;外加镜像文件合集打包&#xff09; 1.打开网址网易开源镜像站 2.打开对应文件夹&#xff08;比如下载kali镜像文件&#xff09; &#xff08;1&#xff09;点击 kali-images/ &#xff08;2&#xff09;点击自己需要的版本(此处我…

添加虚拟机镜像centso 8的步骤

此篇文章仅介绍添加虚拟机镜像的步骤&#xff0c;特别说明这里以centso 8为例 如有需要安装VMware虚拟机&#xff0c;可以通过以下链接跳转至对应文章 VMware虚拟机安装配置及虚拟机网络模式说明https://blog.csdn.net/weixin_55883492/article/details/123790174?spm1001.2…

vmware 虚拟机恢复ghost镜像文件

一、下载winPE.iso、软碟通 链接&#xff1a;https://pan.baidu.com/s/1Ty2td8_9-3Dr7Qc5XHhyNw 提取码&#xff1a;wtuk 二、恢复&#xff1a; 1、配置基础Vmware系统模板&#xff0c;如何配置可百度搜索 注意&#xff1a;内存必须为2G以上,否则无法使用PE 2、CD/DVD — …

macOS Monterey 12.3 (21E230) 虚拟机 IOS 镜像

macOS Monterey 12.3&#xff08;内部版本号 21E230&#xff09;&#xff0c;这是一个重大更新&#xff0c;引入了通用控制&#xff0c;这项功能可以支持一个键盘或者鼠标同时控制多台 Mac 电脑或者 iPad。另外根据用户反馈&#xff0c;此次更新也对 AMD 6000 系显卡进行了优化…

虚拟机的镜像安装

虚拟机镜像的安装 (1)下载好虚拟机iso镜像安装包 (2)命令virt-manager 打开虚拟机管理器 点击左上角创建新虚拟机按钮 (3)选择"Local install media"这个选项 --> Forward (4)点击Browse…按钮 (5)Browse Local–>找到rhel-server-7.3-x86_64-dvd.iso 镜像…

KVM详解(五)——KVM虚拟机镜像格式

今天继续给大家介绍Linux运维相关知识&#xff0c;本文主要内容是KVM虚拟机镜像格式。 一、虚拟机常用镜像格式介绍 目前&#xff0c;虚拟机的主流镜像格式有raw、cow、qcow、qcow2以及vmdk&#xff0c;下面&#xff0c;我就详细介绍一下这些主流的虚拟机镜像格式。 &#x…

虚拟机下载-下载windows镜像

虚拟机—官方镜像下载—windows镜像 访问微软官网: win10: https://www.microsoft.com/zh-cn/software-download/windows10 win7: https://www.microsoft.com/zh-cn/software-download/windows11 点击立即下载工具进行下载[windows] 下载 以后-双击—安装程序 点击 [下一步] 协…

如何下载虚拟机和下载kali虚拟机镜像

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 官网下载(Player版本免费)kali虚拟机镜像下载 官网下载(Player版本免费) VMware Workstation Player是免费版本 1.进入官网 2.选择大版本 3.下载 kali虚拟机镜…

Virtualbox加载虚拟机镜像

启动虚拟机 打开这个文件夹 双击蓝色图标 会自动开启virtualbox虚拟机,并加载当前镜像 必须保证当前镜像文件所在全部路径都没有中文 建议启动Virtualbox时使用单击右键->管理员方式运行 配置镜像参数 选中镜像,点击设置 修改usb设置 修改网络设置 桥接的网卡必须是具…

使用虚拟机镜像文件导入部署openGauss

实验项目名称 实验1 使用虚拟机镜像文件导入部署openGauss 一、实验目的&#xff1a; 将现有的VirtualboxcentosopenGauss镜像文件导入虚拟机&#xff0c;并启动使用openGauss数据库。本实验中使用的镜像文件名为&#xff1a;centos_openGauss.ova。 二、实验内容及过程、结…

制作虚拟机镜像文件

1. Linux&#xff08;Ubuntu14.04&#xff09;虚拟机镜像的制作过程 (1)准备ISO文件 准备Ubuntu14.04版本操作系统的ISO文件&#xff0c;文件名为ubuntu-14.04-server-amd64.iso&#xff08;已提供&#xff09;。 (2) 将ISO文件上传至宿主机 将Ubuntu14.04的ISO文件通过Xftp上…

几个自用的虚拟机镜像文件,兼容VMware vbox等虚拟机 ova格式直接导入

下载地址&#xff1a; 链接: https://pan.baidu.com/s/1-S-gBDFfiZSc4pLyDygfKw 提取码: havg详细说明 导出几个自己常用的虚拟机镜像 - 小类随手记1、win7 64 俄罗斯精简版没有优化&#xff0c;直接上传2、win10 64 20h2 企业 官网版正常安装&#xff0c;然后关闭休眠powercfg…

虚拟机镜像文件

通常虚拟机用到的image文件有两种&#xff1a;raw和qcow2。 制作raw格式文件的命令&#xff1a; #qemu-img create –f raw Linux-test.raw 20G 制作qcow2格式文件的命令&#xff1a; 制作qcow2格式的文件有两种方式&#xff1a;一种是backing_file方式&#xff0c;另外一种…

【调试】——idea远程调试服务器上的代码

前提 有些时候难免会出现一些线上问题&#xff0c;可能就需要远程调试服务器上的代码&#xff0c;依次快速定位错误代码&#xff0c;进行改正。小编最近通过idea进行了远程代码调试&#xff0c;特此记录一下&#xff0c;希望可以帮需要的朋友。 步骤 1、保证本机的代码和服务…

Idea远程调试tomcat

Idea远程调试tomcat Idea配置 配置remote 传输方式&#xff0c;默认为Socket ​ Socket&#xff1a;macOS 及 Linux 系统使用此种传输方式&#xff1b; ​ Shared memory&#xff1a; Windows 系统使用此种传输方式。 ​ 调试模式&#xff0c;默认为Attach ​ Attach&…