2012-05-10 27 views
1
public class Encryption { 
private static final int[] encrypt = {2, 9, 3, 4, 6, 8, 1, 0}; 
private static final int[] decrypt = new int[8]; 
private static final int minLength = 10; 

String encrypt (String password) { 
    if(password.length()<minLength) { 
     return password; 
    } else { 
     char[] encrypt = password.toCharArray(); 

     for (int i = 0; i < encrypt.length; i++) { 
      encrypt[i] = (char) (encrypt[i]); 
     } 
     return String.valueOf(encrypt); 
    } 
} 

String decrypt (String password) { 
    if (password.length()<minLength) { 
     return password; 
    } else { 
     char[] decrypt = password.toCharArray(); 
     for (int i = 0; i < decrypt.length; i++) { 
      decrypt[i] = (char) (decrypt[i]); 
     } 
     return String.valueOf(decrypt); 
    } 
} 

boolean isValidLength (String password) { 
    if (password.length()<minLength) { 
     return true; 

    } else { 
     return false; 
    } 
} 

int getMinLength(){ 
    return minLength; 
    } 
} 

假设加密我的密码(尚未建立驱动程序),但不确定是否正确使用我的变量(加密和解密)。加密和解密变量是这样的,密码改变索引,无论用户输入什么,也不知道,但我想在某个地方使用逆置换方法,但不知道在哪里?任何帮助?需要有人告诉我,如果我的程序是关闭的,或者接近。使用经典置换加密

+0

你可以退后一步,深呼吸一下,然后完全重写那段文字? –

+0

还需要一些时间来确保代码的格式与SO一起工作。消除多余的空白(1个空行足够)并确保缩进显示正确。我们希望提供帮助,但是对我们来说,它很容易*。 :-) –

+0

真的,我想知道的是,如果我可以继续写我的司机。这个程序是要加密我的密码,然后正确解密。由于某种原因,我有可变加密和解密没有被使用,我不知道如何以及在哪里把它放在我的程序,以便重新排列我的密码,然后妥善安排回去...... –

回答

2

警告 - 这是一个很好的警告 - 是因为shadowing

线:

char[] encrypt = password.toCharArray(); 

使[静态] 成员变量 [这也是]称为encrypt在该方法中被遮蔽。因此从不使用“置换值”,并且所使用的算法将严重中断。 (因为加密和解密的“置换值”不同,解密算法会出现另一个问题,因为它甚至会使用[相同的]“置换值”,但这是另一个需要解决的问题。)

解决方案:

  1. 使用更好/不同的名字(比如encryptionKey的排列)。
  2. 明确使用Encryption.encrypt来指代[静态] 成员变量

而且,当然,检讨算法。不需要Encryption.decrypt,并保持它将允许引入其他错误。

快乐编码。