博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hash值和hash算法
阅读量:6445 次
发布时间:2019-06-23

本文共 2019 字,大约阅读时间需要 6 分钟。

hot3.png

  1. hash值的作用

        现在主流的还是base64编码,进行对字符串的编码。base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。一般高级一点的程序员一眼就能看出来是不是用的base64进行编码,进而通过base64的解密,得出想要的结果。

        所以使用hash值进行编码的转换,因为hash值是唯一的,不可逆的!但是通过hash编码却是可以的!二是因为hash值一串数字比较不容易辨别是不是hash值。

    
    

    2.hash值

    一般是把字符串或者byte[],当成一个数组进行遍历,然后转换为int类型的值。hash主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。

    3.hash值的计算算法

这个只是其中的一种算法:

/**      * 使用FNV1_32_HASH算法计算服务器的Hash值,这里不使用重写hashCode的方法,最终效果没区别       */     private static int getHash(String str)     {         final int p = 16777619;         int hash = (int)2166136261L;         for (int i = 0; i < str.length(); i++)            hash = (hash ^ str.charAt(i)) * p;        hash += hash << 13;         hash ^= hash >> 7;         hash += hash << 3;         hash ^= hash >> 17;         hash += hash << 5;                  // 如果算出来的值为负数则取其绝对值         if (hash < 0)             hash = Math.abs(hash);         return hash;     }

    4.字符串与byte[]数组之间的转换

//byte[]转换Stringprivate static String bytesToHexString(byte[] src) {        StringBuilder stringBuilder = new StringBuilder("");        if (src == null || src.length <= 0) {            return null;        }		for (int i = 0; i < src.length; i++) {            int v = src[i] & 0xFF;            String hv = Integer.toHexString(v);            if (hv.length() < 2) {                stringBuilder.append(0);            }            stringBuilder.append(hv);		}        return stringBuilder.toString();	}    //String转换为byte[]	private static byte[] hexStringToBytes(String hexString) {		if (hexString == null || hexString.equals("")) {			return null;		}		hexString = hexString.toUpperCase();		int length = hexString.length() / 2;		char[] hexChars = hexString.toCharArray();		byte[] d = new byte[length];		for (int i = 0; i < length; i++) {			int pos = i * 2;			d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));		}		return d;	}

 

转载于:https://my.oschina.net/u/2380961/blog/708771

你可能感兴趣的文章
swift代理使用
查看>>
代数几何
查看>>
大牛网站
查看>>
Ajax传数据到servlet
查看>>
springMVC和struts2有什么不同?为什么要用springMVC或者struts2?让你实现一个MVC框架大概如何设计?...
查看>>
微信JSApi支付~坑和如何填坑
查看>>
使用 iview Table 表格组件修改操作的显示隐藏
查看>>
招银网络科技笔试题
查看>>
onTouch和onTouchEvent
查看>>
八进制转十进制
查看>>
mssqll2008下只显示相关的登陆操作
查看>>
网站物理路径查找思路
查看>>
App引流增长技术:Deeplink(深度链接)技术
查看>>
赠云风大侠
查看>>
thinkphp留言板开发笔记 1 - 新的
查看>>
DEDECMS中,引入文件
查看>>
运维mysql基础
查看>>
初入前端9
查看>>
animation动画
查看>>
Ubuntu下系统自带截图设置
查看>>