`
chrnc
  • 浏览: 9448 次
  • 性别: 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加密的密码能被反译回明文。所以建议传入的密码字符串必须由数字字母和特殊字符组成。本人上传的表单验证...

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

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

    Helper Master

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

    c#多种加解密示例(md5加密解密)

    代码如下:using System;using System.Collections.Generic;.../// &lt;summary&gt;/// 加解密/// &lt;/summary&gt;public static class CryptHelper{ #region RSA加密  ///  /// 用指定公钥加密文本 ///  /// &lt;param n

    MyHelper-master-C#工具类含API文档

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

    C# 各种通用类集合

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

    C#基类库大全下载--苏飞版

    这里面实现了很多的帮助方法,比如正则验证,加密,解密,MD5加密,字符串的处理等操作。 2.最新的 PageValidate 类 主要是实现了验证,是否为空,是否为数字等。 3.JavascriptHelp 帮助输出简单的JS代码 4.最新...

    android-crypt-helper.zip

    签名可能用到MD5,SHA1,加解密可能用到3DES,AES,RSA等。加密数据传输一般以字符串形式,通常会用到BASE64,HEX转换工具。 一、JAVA方式 笔者搜集了上面提到的主要几种加解密方式及转换的实现,在此分享出来供...

    221209-12Blog(用户角色服务实现)

    MD5Helper:把1个字符串使用MD5/SHA(哈希)加密后,返回该加密后的字符串。 AppSecretConfig:通过该类中的方法,从“appsettings.json”配置文件中获取安全加密相关的数据信息。 TokenModelJwt:在用户登录成功后,...

    C#基类库(苏飞版)

    C#Encrypt--Encrypt加密/Encrypt解密/附加有MD5加密,个人感觉很不错的一个加密类 HashEncode 哈希加密帮助类,得到随机哈希加密字符串,随机哈希数字加密等 MySecurity MySecurity--Security安全加密/Security...

    C#基础类库

    C#Encrypt--Encrypt加密/Encrypt解密/附加有MD5加密,个人感觉很不错的一个加密类 HashEncode 哈希加密帮助类,得到随机哈希加密字符串,随机哈希数字加密等 MySecurity MySecurity--Security安全加密/Security...

    aspnet公共类cs文件.rar

    基于Base64的加密编码(Base64Util.cs)字符串的加密/解密(EncodeHelper.cs)MD5各种长度加密字符、验证MD5等操作辅助类(MD5Util.cs)QQ的EncryptUtil(QQEncryptUtil.cs) 非对称加密验证辅助类(RSASecurityHelper.cs...

    Util:Cisasoft Java 工具类

    获取字符串的md5加密值 RandomHelper 获取指定位数随机数 ShortUUIDHelper 获取22位短UUID值 FileHelper 文件处理助手,删除文件及文件夹 ZipHelper 压缩解压文件 Office2pdfHelper office文档转pdf,目前仅支持...

    DotNet公用类(超多附文档)

    1.DataTable帮助类(DataTableHelper.cs) 2.Access数据库文件操作辅助类(JetAccessUtil.cs) 3.常用的Access数据库Sql操作辅助类库(OleDbHelper.cs) 4.根据各种不同数据库生成不同【分页语句的辅助类】 ...

    WHC第三方控件

    1.DataTable帮助类(DataTableHelper.cs) 2.Access数据库文件操作辅助类(JetAccessUtil.cs) 3.常用的Access数据库Sql操作辅助类库(OleDbHelper.cs) 4.根据各种不同数据库生成不同【分页语句的辅助类】 ...

    APK Messenger APK信息查看工具

    获取包名,版本名,版本号,文件MD5,打包时间 查壳功能,支持获取爱加密,360加固,梆梆加固,阿里云加固,腾讯乐固,百度加固,娜迦加固,顶象加固,通付盾,网秦,几维加固等壳信息 支持提取高清图标 支持...

    asp.net知识库

    常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN...

    vc源代码合集0951.rar

    2012-06-12 12:51 1,826,942 md5加密算法源代码.rar 2012-06-12 11:48 79,221 MFC音乐播放器(滑块控制音量).zip 2012-06-12 13:01 74,769 MyQQ-VC开发的局域网通信程序.rar 2012-06-12 12:18 1,154 N个数中1的个数....

Global site tag (gtag.js) - Google Analytics