界面
本面板可设置对称加密以及非对称加密密钥的各项参数,用于生成对称密钥以及非对称密钥,并将发送方公钥保存在指定目录,便于后续使用公钥对数字签名进行验证操作
- 加密算法可选择AES算法或者DES算法,默认选择AES算法。
- 生成对称密钥需要指定密钥种子,选中复选框可自行指定密钥种子。如不指定则由随机数生成器随机生成密钥种子。
- 生成非对称密钥需要指定双方的密钥模数长度,可指定长度范围在1024-2048之间。输入模数长度后须点击确认进行设置,如需修改点击重置按钮重新设置即可。
- 哈希算法可选择MD5、SHA224、SHA256、SHA384以及SHA512,默认使用MD5算法。
- 完成以上设置请指定密钥保存路径。
- 完成密钥设置并指定保存路径后方可点击保存按钮保存发送方公钥,发送方公钥将保存在
public.key文件中。
界面
本面板可查看生成的对称密钥以及非对称密钥。请在完成密钥设置后点击刷新按钮,对应的密钥参数将在相应面板展示。
- 对称密钥以16进制数组成的字符串显示。
- 非对称密钥以**(模数,指数)**的密钥对形式显示。
界面
本面板将根据设置好的密钥对明文进行一系列操作,生成密文并发送给接收方。包括:
- 使用指定哈希算法生成明文的数据摘要
- 使用发送方私钥对数据摘要进行数字签名
- 使用指定的对称密钥对数字签名以及明文进行加密
- 用接收方公钥对会话密钥进行加密
- 将加密后的会话密钥及签名后的消息发送
- 待加密的数据可以是字符串或文件。可在文本框中输入字符串或选中
从文件输入复选框并选择需要加密的文件。 - 点击发送按钮系统会生成该密文的数据摘要以及摘要的签名,并显示在相应的文本框中,同时接收方会收到密文,并在密文接收面板显示。如果数据来源是文件,则密文会自动保存在与明文文件相同的目录下,并以
.enc为文件后缀名。 - 如需保存数字签名,请在发送信息后点击保存按钮,选择指定目录即可保存签名文件。如数据来源是字符串则文件名为
ciphertext.sig,如数据来源是文件,则文件名为明文文件名添加.sig后缀名。
界面
本面板会自动接收到发送方发来的密文,并执行对密文的解密、认证以及保存密文相关参数的操作。
- 如果发送方发送的是字符串,则消息密文会以16进制字符串直接显示在相应文本框中;如果发送方发送的是文件,则消息密文文本框内会显示密文文件的保存路径。
- 点击解密按钮系统会使用己方私钥以及对方公钥尝试对密文进行解密,如果解密成功会将消息明文以及会话密钥和数字签名显示在对应的文本框中,若消息来源是文件,则会在密文同目录下生成以
decrypted_为前缀的明文文件。如果密文遭到篡改或者密钥不正确则会弹出相应的提示框。 - 如需验证消息来源,点击认证按钮可使用对方公钥验证数字签名,如果验证通过会弹出相应提示框,否则会显示警告信息。
- 如需验证解密失败或认证未通过的情况,可以手动修改密文文件内容,此时点击解密或认证则会触发相应提示。
- 如需保存会话密钥以及数字签名,点击保存按钮选择保存路径即可将其保存在指定目录下。会话密钥将保存在
session.key文件中,数字签名则保存在ciphertext.sig或明文同名的.sig文件中。
界面
本面板是一个独立的消息验证板块,不依赖于密钥设置面板设置的密钥信息。输入待验证明文、发送方公钥以及数字签名即可验证明文的来源。
- 明文可从文本框输入字符串或选择文件。
- 发送方公钥须从
public.key文件中读取,读取成功会将加密使用的哈希算法以及公钥密钥对显示在文本框中。 - 数字签名可以手动输入或从文件选择,签名格式必须是16进制字符串格式。
- 点击认证按钮,系统会用解析得到的哈希算法生成明文的数据摘要,并使用发送方的公钥解密数字签名,将两者进行比较。如果验证通过会弹出提示框,否则会显示警告信息。
└─main
├─java
│ ├─edu
│ │ └─seu
│ │ │ CipherApplication.java
│ │ │
│ │ ├─algorithm
│ │ │ AES.java
│ │ │ DES.java
│ │ │ Hash.java
│ │ │ MD5.java
│ │ │ RSA.java
│ │ │ RSAKey.java
│ │ │ SHA2.java
│ │ │ SHA5.java
│ │ │
│ │ ├─cipher
│ │ │ AsymmetricCipher.java
│ │ │ SymmetricCipher.java
│ │ │
│ │ ├─constant
│ │ │ MessageConstant.java
│ │ │
│ │ ├─enums
│ │ │ Algorithm.java
│ │ │ RSAMode.java
│ │ │
│ │ ├─panels
│ │ │ CheckKey.java
│ │ │ ReceiveData.java
│ │ │ RootPanel.java
│ │ │ SendData.java
│ │ │ SetKey.java
│ │ │ VerifyData.java
│ │ │
│ │ └─utils
│ │ AlgUtils.java
│ │ BytesUtils.java
│ │ DataParser.java
│ │
│ └─META-INF
│ MANIFEST.MF
│
└─resources
SEU_logo.pngCipherApplication.java为主类algorithm目录下为各加密算法的具体实现cipher目录下为对称加密和非对称加密的封装类,包含对对称加密算法以及非对称加密算法的调用constant目录下为常量类,主要是所有提示框提示的消息字符串enums目录下为项目使用到的枚举类panels目录下为程序界面各个面板的UI设计和功能设计utils目录下是各工具类,包括加密功能调用,文件读写以及字节数组和字符串的转换等MANIFEST.MF文件指定程序入口resources为程序LOGO的存放路径
在cryptography-1.0-SNAPSHOT.jar目录下执行以下命令则会弹出系统主界面
java -jar .\cryptography-1.0-SNAPSHOT.jar