/// <summary>
/// 字符加密函數  這是用的一個異或加密
/// </summary>
/// <param name="Str">待加密字符</param>
/// <returns>加密字符</returns>
function EncString(Str:String):String;
var
  i,j:Integer;
begin
  Result:='';
  j:=0;
  for i:=1 to Length(Str) do
  begin
    Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2);
    j:=(j+1) mod 8;
  end;
end;
/// <summary>
/// 字符解密函數
/// </summary>
/// <param name="Str">加密字符</param>
/// <returns>解密字符</returns>
function DecString(Str:String):String;
var
i,j:Integer;
begin
  Result:='';
  j:=0;
  for i:=1 to Length(Str) div 2 do
  begin
    Result:=Result+Char(StrToInt('$'+Copy(Str,i*2-1,2)) xor XorKey[j]);
    j:=(j+1) mod 8;
  end;
end;麻烦哪位大侠将上面的dephi加密和解密代码转换为java代码,不胜感激

解决方案 »

  1.   

    这样的帖子都没人回复,JAVA版本没人了吗?
      

  2.   

    我自己来吧,下面的代码是可以的,但是如果你换了byte数组里面的一些值在一定情况下是会报错的哟,至于是什么原因我就不说了,呵呵!       private byte[] XorKey = { (byte) 247, (byte) 181, (byte) 176, (byte) 213,
    (byte) 243, (byte) 211, (byte) 231, (byte) 250 };       public String endcodeHtml(String html) {
    try {
    html = URLEncoder.encode(html, "UTF-8");//对中文字符进行处理
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    StringBuilder sb = new StringBuilder();
    int j = 0;
    for (char c : html.toCharArray()) {
    String str = Integer.toHexString((byte) c ^ XorKey[j]);
    sb.append(str.substring(6).toUpperCase());
    j = (j + 1) % 8;
    }
    return sb.toString();
    }
    /**
     * 对使用上边的endcodeHtml方法加密过得字符进行解密
     * 
     * @param encodeHtml
     * @return
     */
    public String decodeHtml(String encodeHtml) {
    StringBuilder sb = new StringBuilder();
    int j = 0;
    for (int i = 1; i < encodeHtml.length() / 2 + 1; i++) {
    String f = encodeHtml.substring(i * 2 - 2, i * 2);
    int n = Integer.parseInt(f, 16);
    int m = (byte) n ^ XorKey[j];
    sb.append((char) m);
    j = (j + 1) % 8;
    }
    String result = new String(sb);
    String finalResult = "";
    try {
    finalResult = URLDecoder.decode(result, "UTF-8");//转换中文字符
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return finalResult;
    }