import java.security.MessageDigest;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* 基础加密组件
*
* @author 梁栋
* @version 1.0
* @since 1.0
*/
public abstract class CoderUtil {
public static final String KEY_SHA = "SHA";
public static final String KEY_MD5 = "MD5";
/**
* MAC算法可选以下多种算法
*
* <pre>
* HmacMD5
* HmacSHA1
* HmacSHA256
* HmacSHA384
* HmacSHA512
* </pre>
*/
public static final String KEY_MAC = "HmacMD5";
/**
* BASE64解密
*
* @param key
* @return
* @throws Exception
*/
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
*/
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
/**
* MD5加密
*
* @param data
* @return
* @throws Exception
*/
public static byte[] encryptMD5(byte[] data) throws Exception {
MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
md5.update(data);
return md5.digest();
}
/**
* SHA加密
*
* @param data
* @return
* @throws Exception
*/
public static byte[] encryptSHA(byte[] data) throws Exception {
MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
sha.update(data);
return sha.digest();
}
/**
* 初始化HMAC密钥
*
* @return
* @throws Exception
*/
public static String initMacKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);
SecretKey secretKey = keyGenerator.generateKey();
return encryptBASE64(secretKey.getEncoded());
}
/**
* HMAC加密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return mac.doFinal(data);
}
public static void main(String[] args) throws Exception {
String inputStr = "简单加密";
System.err.println("原文:\n" + inputStr);
byte[] inputData = inputStr.getBytes();
String code = CoderUtil.encryptBASE64(inputData);
System.err.println("BASE64加密后:\n" + code);
byte[] output = CoderUtil.decryptBASE64(code);
String outputStr = new String(output);
System.err.println("BASE64解密后:\n" + outputStr);
}
}
对我有用[0]丢个板砖[0]引用举报管理TOP
zygege
等 级:
#623楼 得分:0回复于:2010-05-07 20:01:31Java codepackage org.wxws.common.tools;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
public class CommonComparator implements Serializable, Comparator {
/*************** 属性名及类型MAP对 *************/
private Map fnameType;
/*********** 对应的排序方式 true=顺序 false=倒序 ************/
private boolean order;
public boolean isOrder() {
return order;
}
public void setOrder(boolean order) {
this.order = order;
}
public Map getFnameType() {
return fnameType;
}
public void setFnameType(Map fnameType) {
this.fnameType = fnameType;
}
/**
* 定义排序规则 如果按照不止一个属性进行排序 这按照属性的顺序进行排序,类是sql order by 即只要比较出同位置的属性就停止
*/
public int compare(Object obj1, Object obj2) {
// 没有属性,则不排序
if(fnameType == null || fnameType.isEmpty()) {
return 2;// 不比较
}
Iterator iterator = fnameType.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String name = (String) entry.getKey();
String type = (String) entry.getValue();
if(compareField(obj1,obj2,name,type,order)) {
// 如果obj1的属性值大于obj2的属性值,则返回正数
return 1;
} else {
// 小于返回负数
return -1;
}
}
return 0;
}
/**
* 方法描述: 比较对象的属性名
*
* fei 2010-4-14
* @param o1 比较对象1
* @param o2 比较对象2
* @param fieldName 比较属性名称
* @param type 比较属性类型
* @param order 比较顺序 true=顺序 false=倒序
* @return
*/
private static boolean compareField(Object o1,Object o2,String fieldName, String type, boolean order) {
try {
Object value1 = getFieldValueByName(fieldName,o1);
Object value2 = getFieldValueByName(fieldName,o2);
if ("String".equals(type)) {
String value1Str = value1.toString();
String value2Str = value2.toString();
if (order) {//顺序
if (value1Str.compareTo(value2Str) > 0) {
return true;
}
} else {//倒序
if (value1Str.compareTo(value2Str) < 0) {
return true;
}
}
} else if ("Integer".equals(type)) {
int value1I = Integer.parseInt(value1.toString());
int value2I = Integer.parseInt(value2.toString());
if (order) {//顺序
if (value1I < value2I) {
return true;
}
} else {//倒序
if (value1I > value2I) {
return true;
}
}
} else if ("Long".equals(type)) {
long value1L = Long.parseLong(value1.toString());
long value2L = Long.parseLong(value2.toString());
if (order) {//顺序
if (value1L < value2L) {
return true;
}
} else {//倒序
if (value1L > value2L) {
return true;
}
}
} else if ("Float".equals(type)) {
float value1F = Float.parseFloat(value1.toString());
float value2F = Float.parseFloat(value2.toString());
if (order) {//顺序
if (value1F < value2F) {
return true;
}
} else {//倒序
if (value1F > value2F) {
return true;
}
}
} else if ("Double".equals(type)) {
double value1D = Double.parseDouble(value1.toString());
double value2D = Double.parseDouble(value2.toString());
if (order) {//顺序
if (value1D < value2D) {
return true;
}
} else {//倒序
if (value1D > value2D) {
return true;
}
}
} else if ("Date".equals(type)) {
Date value1D = (Date)value1;
Date value2D = (Date)value2;
if (order) {//顺序
if (value1D.before(value2D)) {
return true;
}
} else {//倒序
if (value1D.after(value2D)) {
return true;
}
}
}
} catch (Exception e) {
System.out.println("-----------------------------------------------------------------------------");
System.out.println("---------对象的该属性不存在或者不允许在此安全级别上反射该属性,详情请查阅JAVA DOC--------");
System.out.println("-----------------------------------------------------------------------------");
e.printStackTrace();
}
return false;
}
/**
* @param fieldName 属性名 obj 对象
* 反射获得该属性的值
*/
private static Object getFieldValueByName(String fieldName,Object obj) {
try {
String Letter = fieldName.substring(0,1).toUpperCase();
String methodStr = "get"+Letter+fieldName.substring(1);
Method method = obj.getClass().getMethod(methodStr, new Class[]{});
Object value = method.invoke(obj, new Object[]{});
return value;
}catch(Exception e) {
System.out.println("------------------------------------------------------");
System.out.println("---------该"+fieldName+"属性不存在----------------------");
System.out.println("------------------------------------------------------");
return null;
}
}
public static void main(String[] args) {
// List arrayDemo = new ArrayList();
//
// Person p1 = new Person();
// p1.setName("张三");
// p1.setAge(20);
// p1.setSalary(2000);
//
// Person p2 = new Person();
// p2.setName("李四");
// p2.setAge(22);
// p2.setSalary(1800);
//
// Person p3 = new Person();
// p3.setName("王五");
// p3.setAge(25);
// p3.setSalary(1900);
//
// Person p4 = new Person();
// p4.setName("赵六");
// p4.setAge(25);
// p4.setSalary(3000);
//
// Person p5 = new Person();
// p5.setName("刘七");
// p5.setAge(30);
// p5.setSalary(2000);
//
// arrayDemo.add(p1);
// arrayDemo.add(p2);
// arrayDemo.add(p3);
// arrayDemo.add(p4);
// arrayDemo.add(p5);
//
// // *********开始比较********//
// CommonComparator comparator = new CommonComparator();
//
// System.out.println("------1.按照月薪和年龄从低到高比较---------");
// Map map = new HashMap<String, String>();
// map.put("salary", "Integer");
// map.put("age", "Integer");
// comparator.setFnameType(map);
// comparator.setOrder(false);//倒顺
// Collections.sort(arrayDemo, comparator);
// for(int i=0;i<arrayDemo.size();i++) {
// Person person = (Person)arrayDemo.get(i);
// System.out.println("用户名:"+person.getName()+" 年龄:"+person.getAge()+" 月薪:"+person.getSalary());
// }
}
}
分享到:
相关推荐
Java基础加密组件--BASE64加密 使用方法: //加密 String a = EdptByBase64.encryptBASE64("/**/;pas58"); System.out.println(a); //还原 System.out.println(EdptByBase64.decryptBASE64(a)); 具体源码请参见: ...
提供了工业化强度的Java RSA数据加密组件包的设计,并提供了源代码。 -- RSACoder.java:主类,提供了数据加密、解密、签名、签名验证、密钥对生成、密钥对保存和密钥对加载等API; -- RSACoderTestCase.java:JUnit...
Java RSA数据加密组件包是一个基于Java平台的加密工具,它主要利用了RSA(Rivest–Shamir–Adleman)非对称加密算法。RSA是一种广泛应用于网络安全的公钥加密技术,由三位数学家Ron Rivest、Adi Shamir和Leonard ...
《java实用组件集》 源码 加密解密组件。 运行注意事项: 1、运行此环境不需导入jar文件 2、关于加密解密密码请详看注释要求
Java配置加密组件Bouncy Castle是Java安全领域的重要组成部分,它为Java Cryptography Extension (JCE)提供了一套全面且强大的实现。Bouncy Castle不仅包含了加密算法,还支持数字签名、密钥交换、证书管理和PKI...
Java加密扩展基础是Java开发工具包(Java SDK)中的一个重要组件,自1.4版本起,JCE(Java Cryptography Extension)被纳入核心库,为Java开发者提供了强大的安全功能。这个扩展提供了一套完整的框架,使得开发人员...
Java加密组件实现DES、RSA和SHA加密算法是信息安全领域中常用的技术,主要用于数据的保护,确保数据在传输或存储过程中的安全。以下是对这些加密算法的详细解释: 1. **DES(Data Encryption Standard)**:DES是一...
在压缩包中包含了JRE(Java Runtime Environment),这是运行Java应用所必需的组件,但由于它经过了裁剪,可能体积较大,但同时也减少了对系统资源的需求。 文件加密是一个关键的安全措施,尤其在当今数字化时代,...
提供了一个完全可用的,工业化强度的Java RSA数据加密组件设计,并提供了源代码。 -- RSACoder.java:主类,提供了加密解密、数字签名、数字签名验证、密钥对生成、密钥对保存、密钥对加载等API,可方便地调用。 --...
java加密解密研究2、Bouncy Castle和Commons Codec加密组件 java加密解密研究2、Bouncy Castle和Commons Codec加密组件
【服务器端加密组件dll】是一种专门用于在服务器环境中实现数据加密功能的动态链接库(DLL)文件。在互联网时代,数据安全尤为重要,尤其是在服务器端,因为这里存储着大量的敏感信息,如用户账户、交易记录等。加密...
4. **Java加密组件的使用**: Java提供了丰富的加密组件,如`java.security.Key`接口代表各种类型的密钥,`java.security.KeyPair`表示公钥和私钥对,`java.security.Signature`类用于数字签名等。使用这些组件时,...
总的来说,这个Java文件加密器是一个基础的加密工具,虽然加密算法可能不是最先进的,但它展示了如何在Java中利用现有的加密库来实现文件安全。对于初学者来说,这是一个很好的实践项目,可以深入理解加密原理和Java...
Java 类文件加密专家通过分析Class文件的结构,使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件进行破解。 系统特点 1.采用纯C语言开发的内核算法,运行速度极快。 2.彻底...
`sunjce_provider`是Java Cryptography Extension (JCE)的一部分,JCE是Java标准版(Java SE)的一个组件,扩展了Java的安全性,提供了强大的加密功能。`sunjce_provider`提供了一种实现这些加密算法的方式,开发者...
#### 二、Java加密支持的核心组件 ##### 1. Java Cryptography Extension (JCE) Java Cryptography Extension(简称JCE)是Java平台的一个扩展库,提供了高级加密标准(AES)、数据加密标准(DES)等加密算法的支持...
Java中的加密处理是安全编程的重要组成部分,特别是在网络通信、数据存储和身份验证等场景中...总之,Bouncy Castle为Java加密提供了丰富的选择,通过合理的配置和使用,可以提升应用的安全性,满足多样化的加密需求。
Java文本加密解密是计算机编程领域中的一个重要主题,特别是在数据安全和信息安全方面。在这个课程设计中,我们将使用Java语言来实现一个简单的文本加解密系统,该系统具有图形用户界面(GUI),使得用户能够方便地...