Twofish加密解密算法

Twofish encryption decryption Algorithm

我正在使用示例代码from a git repository to understand twofish algorithm, The code below works very fine the results are also correct checked from an online tool ref http://twofish.online-domain-tools.com/

问题如下:-

int[] plainText = new int[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
            0x0D, 0x0E, 0x0F };

    int[] p = new int[4];
    for (int i = 0; i < 4; i++) {
        p[i] = plainText[4 * i] + 256 * plainText[4 * i + 1] + (plainText[4 * i + 2] << 16)
                + (plainText[4 * i + 3] << 24);
    }
    System.out.println("Input:");
    Utils.printInput(p);
    int[] key = p; //
    System.out.println("Key:");
    Utils.printInput(key);
    //
    int[] encrypted = TwoFish.encrypt(p, key);
    //
    System.out.println("Encrypted:");
    Utils.printInput(encrypted);
    System.out.println();

    int[] decrypted = TwoFish.decrypt(encrypted, key);
    System.out.println("Decrypted:");
    Utils.printInput(decrypted);

在上面的代码中,相同的密钥被用作明文和密钥,虽然有传递明文和密钥的要求

int[] encrypted = TwoFish.encrypt(p, key);

以上代码需要从

获取输入
int[] encrypted = TwoFish.encrypt("The plain text information", "000102030405060708090A0B0C0D0E0F");

好的,密码学入门:

  • 对于 Twofish 块密码,您需要操作模式。不过我很难认出你在代码中的那个,这不是一个好兆头。
  • 操作模式需要一个 IV,以及一个随机的 - 或者至少是一个完全不可预测的 IV - 用于 CBC 模式。
  • 您需要编码的明文。现在推荐使用 UTF-8(它与 ASCII 兼容,所以对于您的字符串,您真的不会出错)。
  • 您需要一个十六进制解码器来将密钥解码为字节数组。

顺便说一句,通常我们实施加密块密码和其他原语来对位(或更具体地说是字节)进行操作。密码或至少操作模式应该接受字节,而不是整数。

祝你好运!