Tag: hash

如何使用充气城堡在Java中创建SHA512摘要字符串?

此unit testing失败: public void testDigest() throws NoSuchAlgorithmException { String hashExpected = “150a14ed5bea6cc731cf86c41566ac427a8db48ef1b9fd626664b3bfbb99071fa4c922f33dde38719b8c8354e2b7ab9d77e0e67fc12843920a712e73d558e197”; MessageDigest md = new MessageDigest(); String hashActual = new String(md.digest(“hi”)); Assert.assertEquals(hashExpected, hashActual); } 下面是我的MessageDigest类的实现: import java.io.IOException; import java.io.InputStream; import java.security.NoSuchAlgorithmException; import java.security.Security; import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.digests.SHA512Digest; import org.bouncycastle.crypto.io.DigestInputStream; import org.bouncycastle.jce.provider.BouncyCastleProvider; 公共类MessageDigest {private Digest messageDigest; public MessageDigest() throws NoSuchAlgorithmException { Security.addProvider(new BouncyCastleProvider()); messageDigest = […]

Java – 哈希算法 – 最快的实现

我想知道什么是Java的哈希算法的最佳和最快的实现,特别是MD5和SHA-2 512(SHA512)或256.我想要一个函数来获取一个字符串作为参数并返回哈希作为结果。 亲爱的 编辑:这是为了将每个URL映射到唯一的哈希。 由于MD5在这方面不可靠,我更感兴趣的是找到SHA-2算法的最佳和最快的实现。 请注意,我知道即使SHA-2可能会为某些URL生成相同的哈希值,但我可以接受它。

地方敏感哈希实施?

在C / C ++ / Java / C#中是否有任何相对简单易懂(并且易于实现)的局部敏感哈希示例? 我想更多地了解这个概念,所以想尝试一些文本文件只是为了看看它是如何工作的,所以我不需要任何高性能或任何东西……只是一个哈希的例子为类似输入返回类似哈希的函数。 之后我可以通过实例了解更多信息。 🙂

哈希数组映射Trie(HAMT)

我试图了解HAMT的细节。 我已经用Java实现了一个只是为了理解。 我熟悉Tries,我认为我得到了HAMT的主要概念。 基本上, 两种类型的节点: 核心价值 Key Value Node: K key V value 指数 Index Node: int bitmap (32 bits) Node[] table (max length of 32) 为对象生成32位哈希。 一次遍历5位哈希。 (0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-31)注意:最后一步(第7步)仅为2位。 在每个步骤中,找到位图中该5位整数的位置。 例如, integer==5 bitmap==00001 如果该位为1,则存在该部分哈希。 如果该位为0,则密钥不存在。 如果密钥存在,通过计算位图中0和位置之间的1的数量,找到它在表中的索引。 例如, integer==6 bitmap==0101010101 index==3 如果表指向键/值节点,则比较键。 如果表指向索引节点,则转到2向前移动一步。 我不太了解的部分是碰撞检测和缓解。 在链接的论文中,他暗示: 然后将现有密钥插入新的子哈希表中并添加新密钥。 每次使用5个比特的散列时,碰撞的概率减少1/32。 有时可能会消耗整个32位哈希值,并且必须计算新的哈希值才能确定两个密钥。 如果我要计算一个“新”哈希并将该对象存储在该新哈希中; 你怎么能够在结构中查找对象? […]

类图中的HashMap(UML)

我为我的Java应用程序构建了UML 2.0类图。 在我的代码中,我有HashMap数据类型的属性。 但是,据我所知,UML标准中没有HashMap数据类型。 问题是 – 我可以使用HashMap作为类的属性的数据类型吗? UPDATE 也许在图表中我应该指向java.util包? 并且可能将Map类放在图上的这个包中?

为LSH Minhash算法生成随机哈希函数

我正在编写一个Java中的minhashing算法,它要求我生成任意数量的随机散列函数(在我的情况下为240个散列函数),并通过它运行任意数量的整数(目前为2000)。 为了做到这一点,我一直在为240个散列函数中的每一个生成随机数a,b和c(从1到2001的范围)。 然后,我的哈希函数返回h =((a * x)+ b)%c,其中h是返回值,x是通过它运行的整数之一。 这是随机散列的有效实现,还是有更常见/可接受的方式来实现它? 这篇文章提出了类似的问题,但我仍然对答案的措辞感到困惑: Minhash实现如何找到排列的哈希函数

使用Spring Security 3进行哈希和腌制密码

如何使用Spring Security 3散列密码并加密它们?

java中的SHA2密码哈希

我正在尝试使用SHA2散列一些密码。 我在哪里可以获得一段Java代码? 我看过那篇文章,但我遗漏了一些东西: 用Java编写SHA2密码 Mac mac = Mac.getInstance(“HmacSha256”); SecretKeySpec secret = new SecretKeySpec(key.getBytes(), “HmacSha256”); mac.init(secret); byte[] shaDigest = mac.doFinal(phrase.getBytes()); String hash = “”; for(byte b:shaDigest) { hash += String.format(“%02x”,b); } 这句话是我想编码的字符串吗? 什么是关键(第2行) 提前致谢

为什么HashMap会重新生成密钥对象提供的哈希码?

我正在阅读Java 1.6 API提供的HashMap类的代码,无法完全理解以下操作的需要(在put和get方法的主体中找到): int hash = hash(key.hashCode()); 方法hash()具有以下主体: private static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); } 这有效地通过对提供的哈希码执行位操作来重新计算哈希值。 即使API声明如下,我也无法理解这样做的必要性: 这很关键,因为HashMap使用两个幂的长度哈希表,否则会遇到低位不同的hashCodes的冲突。 我确实理解键值是存储在数据结构数组中的,并且该数组中项的索引位置由其哈希确定。 我无法理解的是这个函数如何为哈希分布添加任何值。

比较Java中的两个hex字符串

我正在使用Java中的Chord协议实现一个简单的DHT。 细节并不重要,但我坚持的是我需要哈希字符串,然后查看一个哈希字符串是否“小于”另一个。 我有一些使用SHA1计算哈希值的代码,它返回一个40位长的hex字符串(Java中的String类型),例如: 69342c5c39e5ae5f0077aecc32c0f81811fb8193 但是,我需要能够比较其中两个,以便告诉我,例如: 0000000000000000000000000000000000000000 小于: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 这是完整的值范围,因为40位数字符串实际上代表0123456789ABCDEF范围内的40个hex数字 有谁知道如何做到这一点? 提前致谢。