Java实现密码学工具,集成了对称加密算法DES,AES,IDEA,公开加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA数字签名验证示例。

前言

我们网络信息安全的实验。。。要我们找各种算法源代码,其实这倒不是很难,就是有点费时间。我综合了网上找到的代码,用Java自制了一个密码学工具。里面包含了对称加密算法 DES,AES,IDEA,公开加密算法 RSA,ECC,散列算法 MD5,SHA1,CRC32,以及 RSA,DSA,ECDSA 实现数字签名验证示例。

做了一整天,有点脑壳疼,肝实验写报告又整了1天半,10人份的活全被我肝完了。

所有加密算法都是我辛辛苦苦找的可以运行的。。然后修改了调用接口,最后用 Base64编码 将结果展示为 String 字符串,我可以保证每个算法都可以正确的加密解密,但是不能保证算法本身的正确性

由于只是一个实验用的小工具,所以很多异常和不人性化的地方没有处理,有需要可以自取。
在这里插入图片描述

git网址

https://github.com/szluyu99/Encryption-And-Decryption-By-Yu

项目结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目预览

这个是俺之前看到的一个小demo,感觉很骚气,就拿来当主界面骚一下。
在这里插入图片描述
点击打乱~
在这里插入图片描述
对称加密中,DES、DES2表示DES算法的两种实现源码,AES、IDEA同理。
在这里插入图片描述
公开加密里,RSA、RSA2表示RSA的两种源码实现。ECC同理,不过ECC3好像忘了做了,不管了。
在这里插入图片描述
散列算法里包含了MD5,SHA1,CRC32。withSalt表示加盐

在这里插入图片描述
数字签名暂时还没放到图形化界面上,但是项目里包含了可以运行的demo。

破解散列表的话,后来采用了 rainbowcrack 和 MD5Crack3.0,UltraCrackingMachine 等几个现成的软件,很好用,就没有放上去了。。

以后有机会把这个软件做完。(好像每个软件我都是这么想的)

下面补充一下 String 与 byte[] 互转的笔记。

String与byte[]互转

通过用例学习Java中的byte数组和String互相转换,这种转换可能在很多情况需要,比如IO操作,生成加密hash码等等。

一般除非特殊需求,否则不要将它们互相转换,他们分别代表了不同的数据,专门服务于不同的目的,通常String代表文本字符串byte[]针对二进制数据

这两天在做网络安全的密码学实验,自己写了一个小工具,集成网上找到的对称加密,公开加密,散列算法等。但是网上很多算法是通过byte[]进行编码与解码,对于我们来说不方便展示,因此可以通过 Base64 转成字符串来展示。

通过String类转换

用String.getBytes()方法将字符串转换为byte数组,通过String构造函数将byte数组转换成String

注意:这种方式使用平台默认字符集

public class StringByteArrayExamples 
{
    public static void main(String[] args) 
    {
        // String
        String string = "hello world";
        // String 转 byte[]
        byte[] bytes = string.getBytes();
        // byte[] 转 String
        String s = new String(bytes);
 
        System.out.println("Decoded String : " + s);
    }
}
hello world

通过Base64互转[jdk-8]

Base64是一种将二进制数据编码的方式,正如UTF-8UTF-16是将文本数据编码的方式一样,所以如果你需要将二进制数据编码为文本数据,那么Base64可以实现这样的需求。

从 Java 8 开始可以使用Base64这个类。

import java.util.Base64;

public class StringByteArrayExamples 
{
    public static void main(String[] args) 
    {
        // byte[]
        byte[] bytes = "hello world".getBytes();
         
        // byte[] 转 String
        String encoded = Base64.getEncoder().encodeToString(bytes);
         
        // String 转 byte[]
        byte[] decoded = Base64.getDecoder().decode(encoded);
         
        System.out.println( new String(decoded) );
    }
}
hello world
发布了171 篇原创文章 · 获赞 47 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43734095/article/details/105303562