又是在翻阅以前东西时发现了一个WEB加密解密的小系统,麻雀虽小五脏俱全,虽然是以前写的,但是多少有一些参考价值!
系统对每一个文件都录入独立的密码,在查看详细时会要求输入!
系统可以选择AES或DES进行加密,独立密码使用MD5加密后截取作为密钥!
如需参考可下载附件,里面有建库脚本,代码注释和很详尽,欢迎讨论!
请您到ITEYE网站看原创,谢谢!
http://cuisuqiang.iteye.com/ !
系统有注册和登录,显示用户文件,增加文件,显示和删除文件的操作:
系统截图如下:
登录:
用户主页:
新增文件:
查看详细,会要求输入独立密码:
显示:
系统代码目录:
以上为系统展示,详细代码在下面附件中!
加密解密的处理类是:
package org.util;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* 加密解密工具类 AES 密钥长度为128,192,256 DES密钥长度为56
* @说明
* @author cuisuqiang
* @version 1.0
* @since
*/
public class EncodingUtil {
/**
* 加密方法
* @param plainText
* @param passWord
* @param model 可是为AES或DES,但是密钥长度必须一致
* @return
*/
public static String encrypt(String plainText, String passWord,
String model) {
try {
// 将密码转为字节数组
byte[] key = passWord.getBytes("utf-8");
// 构造密钥的功能类
SecretKeySpec skeySpec = new SecretKeySpec(key, model);
// 用指定的加密模式得到一个加密的功能类
Cipher cipher = Cipher.getInstance(model);
// 用密钥和模式初始化功能类
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
// 执行操作
byte[] decryptText = cipher.doFinal(plainText.getBytes("utf-8"));
// 转为指定字符串
return byte2hex(decryptText);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 解密方法
* @param cipherText
* @param passWord
* @param model 可是为AES或DES,但是密钥长度必须一致
* @return
*/
public static String decrypt(String cipherText, String passWord,
String model) {
try {
// 将密码转为字节数组
byte[] key = passWord.getBytes("utf-8");
// 构造密钥的功能类
SecretKeySpec skeySpec = new SecretKeySpec(key, model);
// 用指定的加密模式得到一个加密的功能类
Cipher cipher = Cipher.getInstance(model);
// 用密钥和模式初始化功能类
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
// 执行操作
byte[] plainText = cipher.doFinal(hex2byte(cipherText));
// 转为指定字符串
return new String(plainText, "utf-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 16进制字符串转换成字节码
* @param strhex
* @return
*/
private 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;
}
/**
* 字节码转换成16进制字符串
* @param b
* @return
*/
private 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();
}
}
注意我们这里使用的JDBC操作数据库,运行时要先创建数据库:
-- MYSQL上执行
DROP database IF EXISTS `pro_07`;
CREATE DATABASE `pro_07` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use pro_07;
DROP TABLE IF EXISTS `t_note`;
CREATE TABLE `t_note` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`context` varchar(255) DEFAULT NULL,
`create_time` varchar(255) DEFAULT NULL,
`newpass` varchar(255) DEFAULT NULL,
`userid` int(11) DEFAULT NULL,
`encode_type` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `t_users`;
CREATE TABLE `t_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`userpass` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其他的都是一些逻辑上的操作!
请您到ITEYE网站看原创,谢谢!
http://cuisuqiang.iteye.com/ !
自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!