java - JAVA中的TEA加密

标签 java encryption

我想加密 4 个数字,但到目前为止只有 2 个数字被加密。我尝试将 encrypt 方法放入循环中,但它不会加密和解密超过 2 个数字。有人能帮忙解决这个问题吗?

public class TEA {

    private static int delta = 0x9E3779B9; /* a key schedule constant */

    private static int[] key = { 78945677, 87678687, 234234, 234234 };

    public void encrypt(int[] v, int[] k) {

        int v0 = v[0], v1 = v[1], sum = 0, n = 32;
        int k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */
        while (n-- > 0) {
            sum += delta;
            v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >>> 5) + k1);
            v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >>> 5) + k3);
        }
        v[0] = v0;
        v[1] = v1;
        System.out.println(v0 + "," + v1);

    }

    public void decrypt(int[] v, int[] k) {
        int v0 = v[0], v1 = v[1], sum = 0xC6EF3720, n = 32; /* set up */
        int k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */
        while (n-- > 0) {
            v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >>> 5) + k3);
            v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >>> 5) + k1);
            sum -= delta;
        }
        v[0] = v0;
        v[1] = v1;

        System.out.println(v0 + "," + v1);
    }

    public static void main(String[] args) throws IOException {

        TEA tea = new TEA();
        int n = 0;
        int cc[] = new int[100];

        Scanner input = new Scanner(System.in);

        for (int i = 0; i < 4; i++) {
            System.out.println("Enter 4 number to encrypt: ");
            n = input.nextInt();
            cc[i] = n;

        }

        tea.encrypt(cc, key);
        tea.decrypt(cc, key);

    }

}

最佳答案

encrypt()decrypt() 都适用于前两个元素。

因此,您必须在循环中的调用方法中移动数组,或者在加密/解密方法中的连续对上引入循环,例如

for (int idx = 0; idx < v.length; idx *= 2)
{
    int v0 = v[idx], v1 = v[idx + 1], sum = 0, n = 32;
    ...
}

更新 根据Wikipedia例如,该方法只需要两个整数(而不是任何长度的数组)。您需要成对传递您的号码,例如

for (int idx = 0; idx < 4; idx =* 2)
{
    int[] tmp = {cc[idx], cc[idx + 1};
    tea.encrypt(tmp, key);
    cc[idx] = tmp[0];
    cc[idx + 1] = tmp[1];
}

因此,对于每对整数,您将收到另一对已加密的整数。

关于java - JAVA中的TEA加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16477456/

相关文章:

java - 无法购买商品,错误响应 : 7:Item Already Owned

mysql - 静态和/或AES_ENCRYPT加密

.net - 随密文一起发送IV,安全吗?

java - PigLatin 程序帮助...大写?

java - 有什么办法让这个注释自动检查Java方法参数类型

android - 有哪些解决方案来保证服务器端和移动客户端通信的安全?

c - 使用字符串格式的公钥来加密 C 中的消息

sql - 如何加密 SQL Server 2008 数据库

java - 如何编码节点或文档字段?

java - APN 不发送我的一些通知