JAVA中的TEA加密
我想加密4个数字,但到目前为止,只有其中2个被加密。我曾尝试将JAVA中的TEA加密,java,encryption,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
方法放入循环中,但它不会加密和解密超过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);
}
}
公共类茶{
私有静态int delta=0x9E3779B9;/*密钥调度常量*/
私有静态int[]密钥={7894567787678687234234};
公共void加密(int[]v,int[]k){
int v0=v[0],v1=v[1],和=0,n=32;
int k0=k[0],k1=k[1],k2=k[2],k3=k[3];/*缓存键*/
而(n-->0){
总和+=增量;
v0+=((v1>>5)+k1);
v1+=((v0>>5)+k3);
}
v[0]=v0;
v[1]=v1;
系统输出打印项次(v0+“,”+v1);
}
公共无效解密(int[]v,int[]k){
int v0=v[0],v1=v[1],sum=0xC6EF3720,n=32;/*设置*/
int k0=k[0],k1=k[1],k2=k[2],k3=k[3];/*缓存键*/
而(n-->0){
v1-=((v0>>5)+k3);
v0-=((v1>>5)+k1);
总和-=增量;
}
v[0]=v0;
v[1]=v1;
系统输出打印项次(v0+“,”+v1);
}
公共静态void main(字符串[]args)引发IOException{
茶=新茶();
int n=0;
int cc[]=新int[100];
扫描仪输入=新扫描仪(System.in);
对于(int i=0;i<4;i++){
System.out.println(“输入4个要加密的数字:”);
n=input.nextInt();
cc[i]=n;
}
加密(cc,key);
tea.decrypt(cc,key);
}
}
这两个加密()
和解密()
都使用前两个元素
所以,您必须在cycle中移动调用方法中的数组,或者在encrypt/decrypt方法中的连续对上引入一个循环,如
for (int idx = 0; idx < v.length; idx *= 2)
{
int v0 = v[idx], v1 = v[idx + 1], sum = 0, n = 32;
...
}
for(int-idx=0;idx
更新
根据示例,该方法只需要两个整数(而不是任何长度的数组)。你需要成对地传递你的数字,比如
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];
}
for(intidx=0;idx<4;idx=*2)
{
int[]tmp={cc[idx],cc[idx+1};
加密(tmp,密钥);
cc[idx]=tmp[0];
cc[idx+1]=tmp[1];
}
因此,对于每对整数,您将收到另一对加密的整数。您不使用v[2]
和v[3]
在您的代码中,这些数字保持不变。如果不更改加密和解密中的代码,就可以实现相同的功能?然后您必须始终将两个整数数组传递到encrypt中,并在main()中选择这两个整数。Wiki示例()告诉该方法仅适用于两个整数,而不适用于任何长度的数组。我将更新我将其转换为java的unsweryup。但是C使用的是无符号整数,因为java没有这个问题,它在输入4个数字后不会停止。idx