gpt4 book ai didi

Java Cryptonight 哈希算法 - 扩展 AES key 长度?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:48:13 25 4
gpt4 key购买 nike

我正在开发基于 Java 加密货币矿工应用程序的 cryptonight 算法。

我正在尝试根据此文档实现散列函数:https://cryptonote.org/cns/cns008.txt

我的代码:

public byte[] mine(String hash) {
byte[] out = hash.getBytes();
out = doKeccak(out);

//Make key
byte[] key = new byte[32];
System.arraycopy(out, 0, key, 0, 32);

//Make blocks
byte[][] blocks = new byte[8][];
for (int i = 0; i < 8; ++i)
System.arraycopy(out, 64 + 16 * i, blocks[i], 0, 16);

byte[][] keys = new byte[11][];
keys[0]=key;
for (int i = 0; i < 10; ++i) {
keys[i+1]=new byte[32];
Rijndael.expandKey(keys[i], keys[i+1], 0, 32, 32);
}

//byte[] pad = new byte[2097152];

//Encrypt blocks
for (int bid = 0; bid < 8; ++bid) {
for (int i = 0; i < 10; ++i) {
blocks[bid] = AES.encrypt(blocks[i], keys[i+1]);
}
}

return Utils.byteToHex(out);
}

Rijndael.expandKey 方法的用法如下所示:public static void expandKey(byte[] key, byte[] out, int offset, int keySize, int expKeySize)

我应该为扩展 key 大小输入什么数字?我在文档中看不到,这就是我在这里提问的原因。

最佳答案

Cryptonight 使用修改后的 AES 算法。在标准算法中,您将 256 位 key 扩展为 15 个 128 位 key 。对于 cryptonight,您只需要 10 个 128 位的 key 。所以输出长度应该是1280位或者160字节

用 Java 代码示例解释 key 计划的好文章(包括 Cryptonight 修改的 AES 算法的案例):

http://cryptoexplained.tech/hash-algorithms/aes-key-schedule

以及代码来源:

https://github.com/cryptoexplained/hash-algorithms/blob/master/src/main/java/tech/cryptoexplained/hash/aes/Aes.java

关于Java Cryptonight 哈希算法 - 扩展 AES key 长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48586958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com