Java加密夜哈希算法-扩展AES密钥长度?
我正在开发一个基于cryptonight算法的Java cryptocurrency miner应用程序 我正在尝试基于以下文档实现哈希函数: 我的代码:Java加密夜哈希算法-扩展AES密钥长度?,java,algorithm,hash,cryptography,aes,Java,Algorithm,Hash,Cryptography,Aes,我正在开发一个基于cryptonight算法的Java cryptocurrency miner应用程序 我正在尝试基于以下文档实现哈希函数: 我的代码: public byte[] mine(String hash) { byte[] out = hash.getBytes(); out = doKeccak(out); //Make key byte[] key = new byte[32]; System.arraycopy(out, 0, key
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);
}
public byte[]mine(字符串散列){
byte[]out=hash.getBytes();
out=doKeccak(out);
//制造钥匙
字节[]键=新字节[32];
数组复制(out,0,key,0,32);
//制造积木
字节[][]块=新字节[8][];
对于(int i=0;i<8;++i)
系统阵列复制(out,64+16*i,块[i],0,16);
字节[][]键=新字节[11][];
键[0]=键;
对于(int i=0;i<10;++i){
键[i+1]=新字节[32];
Rijndael.expandKey(键[i],键[i+1],0,32,32);
}
//字节[]pad=新字节[2097152];
//加密块
对于(int bid=0;bid<8;++bid){
对于(int i=0;i<10;++i){
块[bid]=AES.加密(块[i],密钥[i+1]);
}
}
返回Utils.byteToHex(out);
}
Rijndael.expandKey
方法的用法如下:publicstaticvoidexpandkey(byte[]key,byte[]out,int offset,int keySize,int expKeySize)
扩展密钥大小应输入什么数字?我在文档中看不到这一点,这就是我在这里提问的原因。加密夜使用改进的AES算法。在标准算法中,将256位密钥扩展为15个密钥,每个密钥128位。对于cryptonight,您只需要10个128位的密钥。 因此,输出长度应为1280位或160字节 这篇好文章用Java代码示例解释了密钥调度(包括Cryptonight修改的AES算法的案例): 代码来源: