package com.lance.algorithm.算法;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Sanlie {
private static Sanlie instance = new Sanlie();
private Sanlie() {
};
public static Sanlie getInstance() {
return instance;
}
public static void main(String[] args) {
Sanlie instance = Sanlie.getInstance();
String[] str1 = new String[] { "11", "3", "3", "3" };
String[] str2 = new String[] { "3" };
List<Result> result = instance.doSanlie(str1, str2);
// List<Result> result = instance.doSanlie(str1);
for (Result resultValue : result) {
System.out.println(resultValue.getIndex() + " "
+ resultValue.getValue());
}
}
/**
* 获取两个数组中相同的字符
*
* @param str1
* str1
* @param str2
* str2
* @return List<String>
*/
public List<Result> doSanlie(String[] str1, String[] str2) {
List<Result> result = new ArrayList<Result>();
int max = str1.length > str2.length ? str1.length : str2.length;
int min = str1.length < str2.length ? str1.length : str2.length;
int[][] cache = new int[max * min][];
for (String str1Value : str1) {
int hash = hash(str1Value.hashCode());
int index = index(hash, max * min);
if (cache[index] == null) {
cache[index] = new int[1];
} else {
cache[index] = Arrays.copyOf(cache[index],
cache[index].length + 1);
}
for (int j = 0; j < cache[index].length; j++) {
if (cache[index][j] == 0) {
cache[index][j] = hash;
break;
}
}
}
-
java散列算法_Java sha1散列算法原理及代码实例
2021-02-26 10:43:18直接调用HashKit.sha1(String str)方法就可以了,,返回...而MD5散列算法生成的字节数是128字节长度,返回的16进制的字符长度是32位代码如下public class HashKit {private static final char[] HEX_DIGITS = "01234...直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40,
也就是用md.digest()方法解析出来的字节数是160字节长度。
而MD5散列算法生成的字节数是128字节长度,返回的16进制的字符长度是32位
代码如下
public class HashKit {
private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
public static String sha1(String srcStr){
return hash("SHA-1", srcStr);
}
public static String hash(String algorithm, String srcStr) {
try {
MessageDigest md = MessageDigest.getInstance(algorithm);
byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
return toHex(bytes);
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String toHex(byte[] bytes) {
StringBuilder ret = new StringBuilder(bytes.length * 2);
for (int i=0; i
ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
}
return ret.toString();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。
原文链接:https://www.cnblogs.com/gne-hwz/p/9549292.html
-
java 散列算法计算重复数据
2013-02-22 19:48:48package com.lance.algorithm.算法; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Sanlie { private static Sanlie instance = new San...转载于:https://blog.51cto.com/shuaigee/1138503
-
关于java散列算法(MD5 SHA-1 SHA-128 SHA-256..)的一点总结
2014-12-26 23:49:04java中提供了丰富的散列算法,在java.security包中,作用是什么就不多说了,今天简要介绍一下他们的用法 1、单纯的使用算法进行计算 public String getMD5(byte[] bytes){ String str=null; try { ...
java中提供了丰富的散列算法,在java.security包中,作用是什么就不多说了,今天简要介绍一下他们的用法1、单纯的使用算法进行计算
public String getMD5(byte[] bytes){ String str=null; try {
MessageDigest md=MessageDigest.getInstance("MD5"); //MD5 算法 /*MessageDigest.getInstance("MD2"); * MessageDigest.getInstance("SHA-256"); * MessageDigest.getInstance("SHA-386"); * MessageDigest.getInstance("SHA-512"); * * * */ md.update(bytes); byte[] b=md.digest(); //MD5 的计算结果是一个128 bit的长整数 b.length = 16 byte=128 bit
//上面两步骤可以合为一步 :byte[] b=digest(bytes); int i; StringBuffer buff=new StringBuffer(); for(int offset=0;offset<b.length;offset++){ i=b[offset]; if(i<0) i+=256; if(i<16) buff.append("0"); buff.append(Integer.toHexString(i));//转化为16进制表示 } str=buff.toString(); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str;//最终的计算结果 }
2、有时候我们为了方便或从效率考虑,对于各种流,我们考虑用DigestInputStrea/DigestOutputStreampublic class test { public static void main(String[] args) { File f=new File("E:/password.txt"); try { FileInputStream in=new FileInputStream(f); MessageDigest digest=MessageDigest.getInstance("MD5"); DigestInputStream din=new DigestInputStream(in, digest); din.on(true);//表示启用散列算法,如果不掉用on方法或者为false,则不能进行散列值得计算 MD5 test=new MD5();<span style="white-space:pre"> </span>//用1的方法进行计算 byte[] b=new byte[din.available()]; din.read(b); String str=test.getMD5(b); System.out.println(str+" "+str.length()); /* for(int i=0;i<b.length;i++){ System.out.println(b[i]); } */ digest=din.getMessageDigest();<span style="white-space:pre"> </span>//从流中得到散列实例,计算散列值,和1的方法进行比较,以验证结果的准确性 byte[] b1=digest.digest(); // int i; StringBuffer buff=new StringBuffer(); for(int offset=0;offset<b1.length;offset++){ i=b1[offset]; if(i<0) i+=256; if(i<16) buff.append("0"); buff.append(Integer.toHexString(i)); } String str1=buff.toString(); System.out.println(str1+" "+str1.length()); } catch (NoSuchAlgorithmException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finaly{
最终的输出结果:<span style="white-space:pre"> </span>if(din!=null) din.close(); } }
表明结果是正确的2d762027a82b834ad48c00cb321de71f 32 2d762027a82b834ad48c00cb321de71f 32
-
java的散列算法
2011-05-13 08:45:42java的散列算法,java的散列算法,java的散列算法,java的散列算法,方便有需要的兄弟,java的散列算法java的散列算法java的散列算法java的散列算法 -
java怎么sha散列算法_Java sha1散列算法的原理解析
2021-03-15 03:34:43Java sha1散列算法的原理解析发布时间:2020-10-31 00:01:59来源:亿速云阅读:101作者:Leah今天就跟大家聊聊有关Java sha1散列算法的原理解析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下...Java sha1散列算法的原理解析
发布时间:2020-10-31 00:01:59
来源:亿速云
阅读:101
作者:Leah
今天就跟大家聊聊有关Java sha1散列算法的原理解析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40,
也就是用md.digest()方法解析出来的字节数是160字节长度。
而MD5散列算法生成的字节数是128字节长度,返回的16进制的字符长度是32位
代码如下
public class HashKit {
private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
public static String sha1(String srcStr){
return hash("SHA-1", srcStr);
}
public static String hash(String algorithm, String srcStr) {
try {
MessageDigest md = MessageDigest.getInstance(algorithm);
byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
return toHex(bytes);
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String toHex(byte[] bytes) {
StringBuilder ret = new StringBuilder(bytes.length * 2);
for (int i=0; i
ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
}
return ret.toString();
}
}
看完上述内容,你们对Java sha1散列算法的原理解析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
-
java MD5 散列算法计算
2018-08-11 12:10:13java 散列算法,主要是通过MessageDigest 对象来实现,因此MD 和 SHA 系列可以共用一套代码 java 散列算法实现:依靠java 类库,(md5实现依据rfc1321 规范) java 加密类库实现,一般是在security 包下,有两个... -
java md5 sha1散列算法_Android 中实现 MD5、SHA1 散列算法
2021-03-21 08:32:02核心代码并不多,但是为了使用方便,我们封装了一下。public class HashHelper{public static String md5(String str){return md5(str, "utf-8");}public static String md5(String str, String encoding){String ... -
java sha512算法_Java哈希散列算法简介 - MD5 & SHA-512
2021-02-26 10:15:20packagecom.andycbluo.secure.checksum....importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.io.Unsuppo... -
Java哈希散列算法简介 - MD5 & SHA-512
2016-01-20 19:25:00Java哈希散列算法简介 - MD5 & SHA-512 在日常的开发工作中,我们常常会碰到这样的一个场景:我们需要有一种可靠的行之有效的方法来检验跟判断数据在传输过程当中的完整性。最常见的一种情况就是当我们传输文件... -
Java实现哈希函数/散列算法
2021-01-15 23:37:26// 哈希函数/散列算法 // 根据某个值进行hash值计算,确保唯一性 public class HashUtils { private static final String ALGORITHM = "SHA-256"; public static String sha256Hex(byte[] bytes){ ... -
java sha1_Java sha1散列算法原理及代码实例
2021-02-12 09:31:10直接调用HashKit.sha1(String str)方法就可以了,,返回...而MD5散列算法生成的字节数是128字节长度,返回的16进制的字符长度是32位代码如下public class HashKit {private static final char[] HEX_DIGITS = "01234... -
SHA安全散列算法
2019-08-20 22:59:08文章目录前言SHA 安全散列算法SHA家族SHA1SHA256SHA384、SHA512安全性Java 中的 SHA使用 commons-codec代码举例Java结果-使用16进制展示 前言 体能状态先于精神状态,习惯先于决心,聚焦先于喜好。 SHA 安全散列... -
time33 java_Hash散列算法 Time33算法
2021-02-13 02:18:03Comparable和Comparator的区别Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...python 进程... -
Java中的散列算法、消息摘要算法、加密算法总结
2019-08-19 18:45:51文章目录BASE64摘要算法(散列值)对称加密非对称加密数字签名 Bouncy Castle 官网 BASE64 在JDK1.6之前,JDK核心一直没有Base64的实现类,在JDK1.6中添加了另一个Base64的实现:javax.xml.bind.DataTypeConverter两... -
java学习-sha1散列算法
2018-08-28 16:45:00直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的...而MD5散列算法生成的字节数是128字节长度,返回的16进制的字符长度是32位 public class HashKit { private static final char[] HEX_DI... -
java实现安全散列算法SHA
2013-05-31 13:50:36该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要... -
java sha256算法_安全散列算法SHA详解
2020-12-02 05:04:34SHA,即Security Hash Algorithm缩写,和MD5类似都是信息摘要算法,主要用于数字签名,网络支付,用户登录,密码校验等场景。网上流传的SHA算法繁多,像SHA1,SHA224,SHA256等等,其实SHA就3个版本,SHA1,SHA2,SHA3,这...