下面是我在Scala中的实现:
package my.crypto
import org.bouncycastle.crypto.digests.SHA3Digest
import org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator
import org.bouncycastle.crypto.PBEParametersGenerator
import org.bouncycastle.crypto.params.KeyParameter
object PBKDF2WithHmacSHA3 {
def apply(password: String, salt: Array[Byte], iterations: Int = 65536, keyLen: Int = 256): Array[Byte] = {
val generator = new PKCS5S2ParametersGenerator(new SHA3Digest(256))
generator.init(
PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(password.toCharArray),
salt,
iterations
)
val key = generator.generateDerivedMacParameters(keyLen).asInstanceOf[KeyParameter]
key.getKey
}
}
对于我来说,一个值得怀疑的事情是new SHA3Digest(256)
,构造函数中的256位长度,它应该与提供的密钥长度相同还是与我所做的某个固定的长度相同?我决定使用固定长度,因为只能使用一些固定值,并且object API用户可以提供任何值作为键长参数,但大多数不常见的值会导致从sha3digest
构造函数内部引发异常。此外,默认值似乎是288(当没有提供密钥长度时),这看起来很奇怪。
提前道谢!
>
不,这些值可能是最后一轮Keccak的值,而不是SHA-3的值。目前还没有SHA-3规范,很有可能在标准化之前对SHA-3进行修改。
=>现在不可能实现SHA-3,只能实现Keccak。
密码哈希对攻击者来说应该尽可能地昂贵。攻击者使用与防御者不同的硬件,至少是GPU,但可能甚至是定制芯片。
web3.sha3(string, options) 参数: String - 传入的需要使用Keccak-256 SHA3算法进行哈希运算的字符串。 Object - 可选项设置。如果要解析的是hex格式的十六进制字符串。需要设置encoding为hex。因为JS中会默认忽略0x。 返回值: String - 使用Keccak-256 SHA3算法哈希过的结果。 示例: //省略初始化过程 va
使用web3.utils.sha3()方法计算给定字符串的sha3哈希值。 注意,如果要模拟solidity中的sha3,请使用soliditySha3函数。 调用: web3.utils.sha3(string) web3.utils.keccak256(string) // ALIAS 参数: string - String: 要计算sha3哈希值的字符串 返回值: String: 计算结果
我正在进行一个Java项目,我必须确保用户密码保存在明文文件中的保密性和完整性。 为此,我将只在文件中写入密码的散列。更具体地说,我的意图是编写密码和随机salt的散列,再加上随机salt本身,以避免使用rainbow和lookup表。我还想使用PBKDF2进行键拉伸,以使散列的计算变得昂贵。最后,我想使用键控哈希算法HMAC作为最后一层保护。 我试图在Java代码中实现我的想法,我找到了上面介绍
采用和solidity同样的方式计算给定参数的sha3哈希值,也就是说, 在计算哈希之前,需要首先对参数进行ABI编码,并进行字节紧凑化处理。 调用: web3.utils.soliditySha3(param1 [, param2, ...]) 参数: paramX - Mixed: 任意类型,或是一个具有如下结构的对象:{type: 'uint', value: '123456'} 或 {t
问题内容: 2019年更新:自Bouncycastle 1.60起,Bouncycastle现在支持PBKDF2-HMAC- SHA256 JAVA是否有PBKDF2-HMAC-SHA256的可靠实现? 我曾经使用bouncycastle进行加密,但是它不提供PBKDF2WithHmacSHA256’。 我不想自己写加密模块。 您能推荐任何其他库或算法吗(如果我可以坚持使用bouncycastle
使用Express.js框架和密码与pbkdf2散列密码我读到默认算法是HMAC-SHA1,但我不明白为什么它没有升级到其他家族或SHA之一。 我们提供的keylen是我们想要的SHA的变体吗?像SHA-256,512等等? HMAC如何改变输出? 最后,当SHA1断开时,它是否足够坚固? 抱歉,如果我把事情搞混了。