`

Java基础加密组件

    博客分类:
  • Java
阅读更多
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加密

    Java基础加密组件--BASE64加密 使用方法: //加密 String a = EdptByBase64.encryptBASE64("/**/;pas58"); System.out.println(a); //还原 System.out.println(EdptByBase64.decryptBASE64(a)); 具体源码请参见: ...

    Java RSA 数据加密组件

    提供了工业化强度的Java RSA数据加密组件包的设计,并提供了源代码。 -- RSACoder.java:主类,提供了数据加密、解密、签名、签名验证、密钥对生成、密钥对保存和密钥对加载等API; -- RSACoderTestCase.java:JUnit...

    Java RSA数据加密组件包

    Java RSA数据加密组件包是一个基于Java平台的加密工具,它主要利用了RSA(Rivest–Shamir–Adleman)非对称加密算法。RSA是一种广泛应用于网络安全的公钥加密技术,由三位数学家Ron Rivest、Adi Shamir和Leonard ...

    java实用组件集 源码 加密解密组件

    《java实用组件集》 源码 加密解密组件。 运行注意事项: 1、运行此环境不需导入jar文件 2、关于加密解密密码请详看注释要求

    java配置加密组件bouncy_castle

    Java配置加密组件Bouncy Castle是Java安全领域的重要组成部分,它为Java Cryptography Extension (JCE)提供了一套全面且强大的实现。Bouncy Castle不仅包含了加密算法,还支持数字签名、密钥交换、证书管理和PKI...

    Java加密扩展基础

    Java加密扩展基础是Java开发工具包(Java SDK)中的一个重要组件,自1.4版本起,JCE(Java Cryptography Extension)被纳入核心库,为Java开发者提供了强大的安全功能。这个扩展提供了一套完整的框架,使得开发人员...

    Java加密组件实现DES、RSA和SHA加密算法

    Java加密组件实现DES、RSA和SHA加密算法是信息安全领域中常用的技术,主要用于数据的保护,确保数据在传输或存储过程中的安全。以下是对这些加密算法的详细解释: 1. **DES(Data Encryption Standard)**:DES是一...

    java 文件夹加密工具

    在压缩包中包含了JRE(Java Runtime Environment),这是运行Java应用所必需的组件,但由于它经过了裁剪,可能体积较大,但同时也减少了对系统资源的需求。 文件加密是一个关键的安全措施,尤其在当今数字化时代,...

    Java RSA数据加密组件

    提供了一个完全可用的,工业化强度的Java RSA数据加密组件设计,并提供了源代码。 -- RSACoder.java:主类,提供了加密解密、数字签名、数字签名验证、密钥对生成、密钥对保存、密钥对加载等API,可方便地调用。 --...

    java加密解密研究2、Bouncy Castle和Commons Codec加密组件

    java加密解密研究2、Bouncy Castle和Commons Codec加密组件 java加密解密研究2、Bouncy Castle和Commons Codec加密组件

    服务器端加密组件dll

    【服务器端加密组件dll】是一种专门用于在服务器环境中实现数据加密功能的动态链接库(DLL)文件。在互联网时代,数据安全尤为重要,尤其是在服务器端,因为这里存储着大量的敏感信息,如用户账户、交易记录等。加密...

    用Java加密类实现DES、RSA及SHA的加密算法

    4. **Java加密组件的使用**: Java提供了丰富的加密组件,如`java.security.Key`接口代表各种类型的密钥,`java.security.KeyPair`表示公钥和私钥对,`java.security.Signature`类用于数字签名等。使用这些组件时,...

    Java文件加密器

    总的来说,这个Java文件加密器是一个基础的加密工具,虽然加密算法可能不是最先进的,但它展示了如何在Java中利用现有的加密库来实现文件安全。对于初学者来说,这是一个很好的实践项目,可以深入理解加密原理和Java...

    Java类文件加密专家

    Java 类文件加密专家通过分析Class文件的结构,使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件进行破解。 系统特点 1.采用纯C语言开发的内核算法,运行速度极快。 2.彻底...

    JAVA数据加密jar包之sunjce_provider.rar

    `sunjce_provider`是Java Cryptography Extension (JCE)的一部分,JCE是Java标准版(Java SE)的一个组件,扩展了Java的安全性,提供了强大的加密功能。`sunjce_provider`提供了一种实现这些加密算法的方式,开发者...

    用Java的加密机制来保护你的数据——转

    #### 二、Java加密支持的核心组件 ##### 1. Java Cryptography Extension (JCE) Java Cryptography Extension(简称JCE)是Java平台的一个扩展库,提供了高级加密标准(AES)、数据加密标准(DES)等加密算法的支持...

    Java中配置加密组件Bouncy Castle.docx

    Java中的加密处理是安全编程的重要组成部分,特别是在网络通信、数据存储和身份验证等场景中...总之,Bouncy Castle为Java加密提供了丰富的选择,通过合理的配置和使用,可以提升应用的安全性,满足多样化的加密需求。

    课程设计java文本加密解密

    Java文本加密解密是计算机编程领域中的一个重要主题,特别是在数据安全和信息安全方面。在这个课程设计中,我们将使用Java语言来实现一个简单的文本加解密系统,该系统具有图形用户界面(GUI),使得用户能够方便地...

Global site tag (gtag.js) - Google Analytics