密码学综合工具

  • 前言
  • git网址
  • 项目结构
  • 项目预览
  • String与byte[]互转
  • 通过`String`类转换
  • 通过`Base64`互转[jdk-8]


前言

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

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

由于只是一个实验用的小工具,所以很多异常和不人性化的地方没有处理。我觉得这工具本身价值不是很大,但是找能运行的开源密码学算法真的脑壳疼,这里集成了上面提到的所有算法源码(下面有项目结构),有需要可以自取。

java 给数字加密 java实现密码加密_java

git网址

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

项目结构

java 给数字加密 java实现密码加密_算法_02


java 给数字加密 java实现密码加密_java 给数字加密_03


java 给数字加密 java实现密码加密_java_04


java 给数字加密 java实现密码加密_java_05

项目预览

这个是俺之前看到的一个小demo,感觉很骚气,就拿来当主界面骚一下。

java 给数字加密 java实现密码加密_算法_06


点击打乱~

java 给数字加密 java实现密码加密_算法_07


对称加密中,DES、DES2表示DES算法的两种实现源码,AES、IDEA同理。

java 给数字加密 java实现密码加密_信息安全_08


公开加密里,RSA、RSA2表示RSA的两种源码实现。ECC同理,不过ECC3好像忘了做了,不管了。

java 给数字加密 java实现密码加密_java_09


散列算法里包含了MD5,SHA1,CRC32。withSalt表示加盐

java 给数字加密 java实现密码加密_信息安全_10


数字签名暂时还没放到图形化界面上,但是项目里包含了可以运行的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