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 兼容,所以对于您的字符串,您真的不会出错)。
- 您需要一个十六进制解码器来将密钥解码为字节数组。
顺便说一句,通常我们实施加密块密码和其他原语来对位(或更具体地说是字节)进行操作。密码或至少操作模式应该接受字节,而不是整数。
祝你好运!
我正在使用示例代码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 兼容,所以对于您的字符串,您真的不会出错)。
- 您需要一个十六进制解码器来将密钥解码为字节数组。
顺便说一句,通常我们实施加密块密码和其他原语来对位(或更具体地说是字节)进行操作。密码或至少操作模式应该接受字节,而不是整数。
祝你好运!