Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java加密夜哈希算法-扩展AES密钥长度?_Java_Algorithm_Hash_Cryptography_Aes - Fatal编程技术网

Java加密夜哈希算法-扩展AES密钥长度?

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

我正在开发一个基于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, 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算法的案例):

代码来源: