`
chrnc
  • 浏览: 9604 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Helper 类,帮助处理个md5加密什么的

阅读更多
package com.gmail.chrnc0000;

import java.util.*;
import java.lang.reflect.Field;
import java.math.BigInteger;
import java.security.MessageDigest;


public class Helper {



    /**
     * 传入一个目标日期的long 值,传一个int的偏移量,计算出偏移日期.
     */
    public static long getNewDate(long originalDate, int dayForward) {
        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.setTimeInMillis(originalDate);
        cal.set(cal.DAY_OF_MONTH, cal.get(cal.DAY_OF_MONTH) + dayForward);
        return cal.getTimeInMillis();
    }


    /**
     * 取得 sourceString 的 baseType进制的md5值 ,加密用 ,多少程序能允许明文存放密码呢?
     * 
     */
    public static String toMD5String(String sourceString, int baseType) throws Exception {
        String arg = "MD5";
        String tmp = sourceString + "";
        MessageDigest messagedigest = MessageDigest.getInstance(arg);
        byte abyte0[] = tmp.getBytes();
        for (int i = 0; i < tmp.length(); i++) {
            messagedigest.update(abyte0, 0, i);
        }

        byte abyte1[] = messagedigest.digest();
        BigInteger biginteger = new BigInteger(abyte1);
        return biginteger.toString(baseType);
    }


    /**
     * 检查字符串是不是为空,spring util类的写发,我直接copy过来的.
     */
    public static boolean hasLength(String str) {
        return (str != null && str.length() > 0);
    }


    private static void changeFieldAccessAttri(java.lang.reflect.Field[] objs) throws Exception {
        for (int i = 0; i < objs.length; i++) {
            objs[i].setAccessible(true);
        }
    }

    public static java.lang.reflect.Field[] getAllFields(java.lang.Class clazz) throws Exception {
        ArrayList list = new ArrayList();
        getAllFields(list, clazz);

        java.lang.reflect.Field[] retValue = (java.lang.reflect.Field[]) list.toArray(new java.lang.reflect.Field[list.size()]);
        changeFieldAccessAttri(retValue);
        return retValue;
    }


    public static HashMap getAllValue(Object obj) throws Exception {
        java.lang.reflect.Field[] fields = getAllFields(obj.getClass());
        HashMap<Field, Object> map = new HashMap<Field, Object>();
        for (int i = 0; i < fields.length; i++) {
            map.put(fields[i], fields[i].get(obj));
        }
        return map;
    }

    private static void getAllFields(ArrayList<Field> list, java.lang.Class clazz) {
        java.lang.reflect.Field[] fields = clazz.getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            list.add(fields[i]);
        }

        java.lang.Class supperClass = clazz.getSuperclass();
        if (!supperClass.equals(Object.class)) {
            getAllFields(list, supperClass);
        }
    }


    /**
     * 在两个range之间取得整型随即数值.
     */
    public static int getRandomValue(int startRange, int endValue) throws Exception {
        if (startRange < 0 || endValue < 0) {
            throw new IllegalArgumentException("start range and end value both must be positive");
        }

        if (startRange > endValue) {
            throw new IllegalArgumentException("start tange must be greater equal than end value.");

        }

//        endValue += 1;

        if (startRange == endValue) {
            return endValue;
        }

        Random rand = new Random();

        int retValue = -1;

        while (retValue < startRange) {
            retValue = rand.nextInt(endValue);
        }

        return retValue;

    }

    /**
     * 在多个Object里面随即取一个出来.不知道哪里能用上.
     */
    public static Object getRandomObject(Object[] objs) throws Exception {
        if (objs != null && objs.length > 0) {
            return objs[getRandomValue(0, objs.length)];
        } else {
            return null;
        }
    }

    /**
     * 返回给定的字符串反转过来后的字符串.
     */
    public static String getReversedString(String str) throws Exception {
        StringBuffer sb = new StringBuffer(str);
        return sb.reverse().toString();
    }

    /**
     * 把一个字符串数组用给定的分隔符连接起来,JavaScript 里面默认是使用","连接的,这里没有.
     */
    public static String jionStringArray(String[] strs, String separator) throws Exception {
        if (strs == null || strs.length == 0) {
            return "";
        }


        if (!hasLength(separator)) {
        	separator = "";
            
        }

        StringBuffer sb = new StringBuffer();

        boolean isFirst = true;

        for (int i = 0; i < strs.length; i++) {
            if (isFirst) {
                sb.append(strs[i]);
                isFirst = false;
            } else {
                sb.append(separator).append(strs[i]);
            }
        }
        return sb.toString();
    }

    /**
     * just for fun.
     */
    public static String[] getRandomStringArray(int wordMaxLength, int sectionMaxLength) throws Exception {
        String[] source = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};

        int sectionlength = getRandomValue(0, sectionMaxLength);
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < sectionlength; i++) {
            int wordLength = getRandomValue(0, wordMaxLength);
            StringBuffer sb = new StringBuffer();
            for (int j = 0; j < wordLength; j++) {
                String tmpValue = (String) getRandomObject(source);
                sb.append(tmpValue);
            }
            list.add(sb.toString());

        }

        String[] listValues = (String[]) list.toArray(new String[list.size()]);

        return listValues;

    }
    /**
     * 把数组里面的对象顺序放到 ArrayList里面返回.这个code写的有点磕碜啦~
     * @param objs
     * @return
     * @throws Exception
     */
    public static ArrayList fillToArray(Object[] objs) throws Exception {
        ArrayList<Object> array = new ArrayList<Object>();
        if(objs == null ){
            return array;
        }
        for (int i = 0; i < objs.length; i++) {
            array.add(objs[i]);
        }
        return array;
    }
    
    /**
     * 单纯给数字排序的业务逻辑并不多,这里给出了按照属性给VO等排序的方法,如方法名所描述,fieldName对应的属性需要是数字.
     */
    public static void sortByNumberField(ArrayList list,String fieldName) throws Exception{
    	java.lang.reflect.Field[] fields = getAllFields(list.get(0).getClass());
    	
    	java.lang.reflect.Field field = null;
    	for(int i=0;i<fields.length;i++){
    		if(fields[i].getName().equals(fieldName)){
    			field = fields[i];
    			break;
    		}
    	}
    	
    	if(field == null){
    		throw new Exception("field does not exist.");
    	}
    	

    	com.gmail.chrnc0000.Comparator comp = new com.gmail.chrnc0000.Comparator(field);
    	Collections.sort(list,comp);
    	
    	
    }
    
    /**
     * 返回给定的object的json 格式的字符串,当前版本只对java.lang.*的属性转换.
     */
    public static String toJSONString(Object obj) throws Exception{
    	
    	if(obj == null){
    		return null;
    	}
    	
    	StringBuffer sb = new StringBuffer("{");
    	
    	java.lang.reflect.Field[] fields = getAllFields(obj.getClass());
    	HashMap valueMap = getAllValue(obj);
    	boolean isFirst = true;
    	for(int i=0;i<fields.length;i++){
    		
    		Object value = valueMap.get(fields[i]);
    		if(value == null ) value = "";
    		String valueClassName = value.getClass().getName();
    		valueClassName = valueClassName.replace("[", "");
    		
    		if(valueClassName.startsWith("Ljava.lang.") || valueClassName.startsWith("java.lang.")){
        		String fieldName = fields[i].getName();
        		if(!isFirst){
        			sb.append(",");
        		}
        		sb.append(fieldName).append(":");
        		sb.append(getLangTypeJSONString(value));
        		isFirst = false;
    		}

    	}
    	return sb.append("}").toString();
    }
    

    
    private static String getLangTypeJSONString(Object obj) throws Exception{
    	boolean isNull = false;
    	if(obj == null) {
    		obj = "null";
    		isNull = true;
    	}
    	
    	String valueClassName = obj.getClass().getName();
    	valueClassName = valueClassName.replace("[", "");
    	if(valueClassName.startsWith("java.lang.")){
    		if(isNull){
    			return obj.toString();
    		}else{
    			return "'"+obj.toString()+"'";
    		}
    		
    	}
    	
    	if(valueClassName.startsWith("Ljava.lang.")){
    		Object[] objs = (Object[])obj;
    		StringBuffer sb = new StringBuffer("[");
    		boolean isFirst = true;
    		for(int i=0;i<objs.length;i++){
    			if(!isFirst){
    				sb.append(",");
    			}
    			sb.append(getLangTypeJSONString(objs[i]));
    			isFirst = false;
    		}
    		
    		return sb.append("]").toString();
    	}
    	return null;
    }
    
    


    
    /**
     * test function.
     * @param test
     * @return
     */
    public static String getTestJSONStr(String test){
    	System.out.println(test);
    	VO vo = new VO();
    	try {
    		System.out.println(toJSONString(vo));
			return toJSONString(vo);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
    }
    
    
    public String toString(){
    	return "com.gmail.chrnc0000.Helper";
    }
    

    
    



}

/**
 * just for test.
 * @author Administrator
 *
 */
final class VO {
	String strs[][] = {null,{"sdf",null},{"sdf","ggds"},{"wer","saw"}};
	Hashtable table = new Hashtable();
	String name = "backend returned value";
	int age = 12;
	String sysLoginID;
	String password = "sdf";
	
}


final class Comparator implements java.util.Comparator {
	
	java.lang.reflect.Field field = null;

	public Comparator(java.lang.reflect.Field field) {
		this.field = field;
	}



	public int compare(Object arg0, Object arg1) {

		try {
			Object fieldValue0 = field.get(arg0);
			Object fieldValue1 = field.get(arg1);
			if (Double.parseDouble(fieldValue0.toString()) > Double.parseDouble(fieldValue1.toString())) {
				return 1;
			} else if (Double.parseDouble(fieldValue0.toString()) < Double.parseDouble(fieldValue1.toString())) {
				return -1;
			}

		} catch (Exception ex) {
			ex.printStackTrace();
		}

		return 0;
	}
	
}




分享到:
评论
2 楼 sun188cn 2008-11-25  
不错的工具类,对我们这些新手很有帮助!
1 楼 大力水手 2008-11-19  
不错,收藏了正准备写一个呢 谢了

相关推荐

    Md5Helper加密帮助类

    对Md5加密对象的封装类,方便在开发过程中直接使用

    c# MD5Helper处理md5加密算法

    c# MD5Helper处理md5加密算法

    Spring boot 使用MD5加密字符串工具类

    该工具类使用于spring boot 开发,返回值为md5加密后的字符串,参数为字符串,一般用于加密密码。为了防止MD5加密的密码能被反译回明文。所以建议传入的密码字符串必须由数字字母和特殊字符组成。本人上传的表单验证...

    SqlHelper,SqliteHelper,ExcelHelper,MD5Helper所有都有

    4. **MD5Helper**: MD5Helper是用于处理MD5散列的工具类。MD5是一种广泛使用的加密散列函数,产生128位(16字节)的散列值,通常以32位十六进制数字表示。MD5Helper通常包含计算字符串或文件的MD5散列值、验证散列...

    Jmeter对接口测试入参实现MD5加密

    这段脚本导入了`DigestUtils`类,并使用`md5Hex`方法对原始密码进行MD5加密,然后将结果存入变量`password_md5`。 3. 在请求参数中引用`password_md5`变量,发送请求,查看加密结果。 总结,通过JMeter的内置函数...

    MD5帮助类,生成Md5加密字符串

    MD5帮助类。生成MD5加密字符串 public static string CretaeMD5(string fileName) { string hashStr = string.Empty; try { FileStream fs = new FileStream( fileName, FileMode.Open, FileAccess.Read,

    iOS移动开发MD5加密

    - 压缩包中的"MD5Helper"可能是一个Objective-C或Swift的类,提供了MD5加密的接口。这个类可能包含如`+ (NSString *)md5:(NSString *)input`这样的方法,用于将输入的字符串转化为MD5值。 - 在实际开发中,开发者...

    WP8中MD5加密类

    在WP8中,我们可以自定义一个MD5加密类来实现这一功能。以下是对WP8中MD5加密类的详细解释: 首先,MD5是基于消息摘要算法设计的,它接受任意大小的二进制数据,通过一系列复杂的计算后,产生一个128位(16字节)的...

    android平台基于ndk c语言和java语言的md5加密

    在Android平台上进行应用程序开发时,有时需要处理数据的安全性,比如使用MD5(Message-Digest Algorithm 5)加密算法来确保信息的完整性。本主题主要探讨如何在Android中结合Java和NDK(Native Development Kit)...

    MD5.rar_c#l md5库

    在C#中,MD5库可能提供了一个封装好的类,例如`MD5Helper`,包含了上述步骤的静态方法,用户只需传入要加密的字符串,即可直接获取到MD5加密后的结果,大大简化了开发过程。 例如,一个简单的MD5加密方法可能如下所...

    .net 100个辅助Helper工具类

    6. **加密解密**:为了保证数据安全,Helper类可能包含了常用的加密算法,如MD5、SHA系列、AES等,帮助开发者实现数据的安全存储和传输。 7. **XML/JSON操作**:序列化和反序列化XML或JSON数据是常见的数据交换方式...

    C# 各种通用类集合

    12.Base64加密解密 MyBase64Helper.cs MD5加密等操作辅助类 MyMD5Helper.cs 13.鼠标辅助操作类,提供获取鼠标状态以及模拟鼠标点击等操作 MyMouseHelper.cs 14.中文转拼音的辅助类 MyPinYinHelper.cs 15.字符串类型...

    CHRHelper_HashHelper_helper_C#_RsaHelper_CryptHelper_

    在给定的标题"CHRHelper_HashHelper_helper_C#_RsaHelper_CryptHelper_"和描述"C# 加密帮助类 包括 CryptHelper HashHelper RsaHelper 好东西"中,我们可以看到这是一组与C#编程语言相关的加密和哈希辅助类。...

    Helper Master

    Public class ImageHelper 图片处理帮助类 Public class ImageUpload 图片上传类 Public class INIFileHelper INI文件读写类。 Public class IpHelper 共用工具类 Public class JavaScriptHelper JavaScript...

    GO资源:Go加密帮助程序-Go Encryption Helper

    "Go Encryption Helper" 是一个针对Go语言的加密辅助工具,它旨在帮助开发者更轻松地实现加密功能。在这个资源包encrypt-master1中,我们可以预见到一系列与Go语言加密相关的代码、示例和教程。 Go语言的加密库主要...

    testmd5.rar

    这个"testmd5.rar"压缩包似乎包含了一个C#实现的MD5加密方法的代码示例。下面我们将深入探讨MD5算法以及如何在C#中实现它。 MD5算法由Ronald Rivest于1991年提出,主要用于数据完整性校验和密码存储。它的主要特点...

    传智播客C#/.net MVC 电商项目中用到的各种企业级Helper

    5. **EncryptHelper.cs**:加密解密助手类,提供了数据加密和解密的方法,如MD5、SHA、AES、DES等,用于保护敏感信息的安全,如密码存储、数据传输加密。 6. **ConverterAuto.cs**:自动类型转换助手,可能会提供...

    cocos2dx的sqlite帮助类

    本篇文章将详细讲解如何在Cocos2d-x中使用SQLite帮助类进行数据库操作。 首先,我们需要了解Cocos2d-x是如何与SQLite交互的。Cocos2d-x并不直接提供SQLite的API,而是依赖于平台特定的API来实现。因此,开发者通常...

    详解.NET中的加密算法总结(自定义加密Helper类续)

    在.NET框架中,散列算法的使用可以通过一个通用的Encrypt方法来实现,该方法接受一个实现了HashAlgorithm抽象类的算法实例作为参数,例如MD5或SHA1。这样做的好处是,我们只需要维护一个通用的加密方法,而不用为每...

Global site tag (gtag.js) - Google Analytics