用于加密的多个字符串的连接

时间:2018-02-08 12:05:52

标签: java encryption biginteger

我有一个加密方法,它将每个字符串转换为byte []并将它们附加到一个数组以便稍后执行加密。

现在我必须使用另一个只接收一个String的方法来执行相同的加密。

当我使用带有字符串列表的第一个方法时,我得到相同的密码,第二个带有单个字符串化合物的字符串在第一个方法列表的所有字符串的串联上,当其中一个字符串是表示,例如:

String str = 
"2CD03B874A418A7C90E1A32F6CB5B952BB29B734A397851903AA403BD9ADDD9CD19AF583A067D9812B8B68EE1884FB347C030609CE31ECF4"

我试图像这样转换字符串的符号(如果有的话):

BigInteger bi = new BigInteger(str, 16);
if (bi.compareTo(BigInteger.ZERO) < 0) {
    bi = bi.abs().not().add(BigInteger.ONE);
}                   
String str2 = new String(bi.toByteArray(), "windows-1252");

任何提示?

EDITED: 第一种方法:

String crypt1(ArrayList<String[]> list) {
   for(String str:list) {
      update(str, str.length());
   }
   byte[] out = new byte[16];
   convert(out);
   return getHex(out);
}

void update(byte[] buf, int len) {
   ...
   System.arraycopy(buf, 0, mainBuffer, index1, len); 
   ...
}

String convert1(byte[] out) {
    ... // performs MD5 conversion over "out"
}

String getHex(byte[] bytes) {
    String hex = "";
    for (byte b : bytes) {
        hex += Integer.toHexString(0xFF & b);
    }
    return hex;
}

第二种方法:

String crypt2(ArrayList<String[]> list) {
   String text = "";
   for(String str:list) {
      text += str;
   }
   return convert2(text);
}

String convert2(String text) {
    ... // gets text bytes
    ... // performs MD5 conversion
    return cipher;
}

1 个答案:

答案 0 :(得分:0)

你有很多移动部件和代码重复 我建议只使用两种不同的方法:

  • 获取字符串并返回byte []
  • 获取字符串数组并返回连接字符串
  • 的byte []

并在使用byte []对象后使用完全逻辑,摆脱convert2()以及update() 许多函数使代码更容易出错和错误

这样你可以检查输入到那些函数的字符串是否返回相同的字节[]

草案代码的例子可以是这样的

public byte[] stringToByte(String str) {
    return str.getBytes();
}

public byte[] StringArrayToByte(ArrayList<String> list){
    String newStr = "";
    for (String str : list)
            newStr += str;

    return newStr.getBytes();
}
另外我建议你看一下apache lib,它们实现了大部分的字符串操作和加密函数 https://commons.apache.org/