0

How can I convert the specific code written in Delphi to JAVA?

Delphi code is Decrypt code.

function Decrypt(const S: String; Key1, Key2, Key3: WORD): String;
var
  i: Byte;
  FirstResult: String;
begin
  FirstResult:=HexToValue(S);
  SetLength(Result, Length(FirstResult));
  for i:=1 to Length(FirstResult) do begin
    Result[i]:=Char(Byte(FirstResult[i]) xor (Key1 shr 8));
    Key1     :=(Byte(FirstResult[i])+Key1)*Key2+Key3;
  end;
end;

function HexToValue(const S: String) : String;
var i: Integer;
begin
  SetLength(Result, Length(S) div 2);
  for i:=0 to (Length(S) div 2)-1 do begin
    Result[i+1] := Char(StrToInt('$'+Copy(S,(i*2)+1, 2)));
  end;
end;

The Encrypt problem was solved by courtesy of 'David Heffernan' and 'stackoverflow.com'

Question1 : delphi encrypt convert Java Code

thank so much! so i tried to convert Decrypt code in Delphi to JAVA until now!!! really hum... but i couldn't solve about it!! oh my god! i'm shame..... but i want you to help me. again... i need decrypt code ..

Java Encrypt code

class SO15885898 {

    private static String ValueToHex(int myInt)
    {
    StringBuilder sb = new StringBuilder();
    sb.append(Integer.toHexString(myInt & 0xff));
    if (sb.length() < 2) {
        sb.insert(0, '0'); // pad with leading zero if needed
    }
    return sb.toString();
    }

    public static void main(String[] args)
    {
    int key1=11;        
    int key2=22;        
    int key3=33;

    String value = "ABCDE";
    for(int i=0; i<value.length(); i++){
        byte bValue = value.substring(i).getBytes()[0];
        int rValue = bValue^(key1>>8);
        key1 = ((rValue+key1)*key2+key3) & 0xffff;
        System.out.print(ValueToHex(rValue));
    }
    }
}

please Java decrypt code!! . .

This is what I tried:

public static void main(String[] args)
{
 int key1=111;        
 int key2=222;        
 int key3=333;

 i tried about this...

 String resultH = "";
 String resultEncrypt = "";
 String resultDecrypt = "";
 String value = "ABCDEF";

 for(int i=0; i<value.length(); i++){
     byte bValue = value.substring(i).getBytes()[0];
     int rValue = bValue^(key1>>8);
     key1 = ((rValue+key1)*key2+key3) & 0xffff;
     resultEncrypt += ValueToHex(rValue);
  resultH += HexToValue(ValueToHex(rValue).getBytes()) ;
 }

 key1=111;
 for(int i=0; i<resultH.length(); i++){
     byte bValue = resultH.substring(i).getBytes()[0];
     int rValue = bValue^(key1>>8);
     key1 = ((rValue+key1)*key2+key3) & 0xffff;
     resultDecrypt += rValue;
 }

 //41db791e06a9
 System.out.println("resultEncrypt : " + resultEncrypt);
 //91242156862519211605712161341202650962331971751025.......................
 System.out.println("resultDecrypt : " + resultDecrypt);
}

public static byte[] HexToValue(byte[] szSrc) {
    int nLen = szSrc.length;
    byte[] szDest = new byte[nLen / 2];
    char szChar[] = new char[2];
    for (int I = 0; I < nLen / 2; I++) {
        szChar[0] = (char) szSrc[I * 2];
        szChar[1] = (char) szSrc[I * 2 + 1];
        byte btDest = (byte) HexToDecimal(szChar);
        int nDest = btDest < 0 ? (Byte.MAX_VALUE + 1) * 2 + btDest : btDest;
        szDest[I] = (byte) nDest;
    }
    String sRet = new String(szDest);
    return szDest;
}

public static int HexToDecimal(char[] szSrc) {
    int nRet = 0;
    int nLen = szSrc.length;
    for (int i = 0; i < nLen; i++) {
        byte cChar = (byte) szSrc[i];
        nRet = nRet * 16;
        nRet += HexToDecimal(cChar);
    }
    return nRet;
}
public static int HexToDecimal(byte cChar) {
    if (cChar == 'A' || cChar == 'a')
        return 10;
    if (cChar == 'B' || cChar == 'b')
        return 11;
    if (cChar == 'C' || cChar == 'c')
        return 12;
    if (cChar == 'D' || cChar == 'd')
        return 13;
    if (cChar == 'E' || cChar == 'e')
        return 14;
    if (cChar == 'F' || cChar == 'f')
        return 15;
    return (cChar - 48);
}
7
  • Do you have a specific question? Commented Apr 10, 2013 at 17:59
  • i tried about this... 479lgs.blog.me/150165814698 But I did not succeed. Commented Apr 10, 2013 at 18:19
  • How didn't it succeed? What went wrong? Commented Apr 10, 2013 at 18:22
  • I was hoping that value of 'resultDecrypt' is 'ABCDEF' Commented Apr 10, 2013 at 18:40
  • This would be so much easier if you gave us complete programs. I cannot compile your Java as is. Where do I find HexToValue? I wish you would take more time and give us complete compilable programs. It's simple for you to do. Commented Apr 10, 2013 at 19:02

1 Answer 1

1

Here's a translation of your Delphi code:

class SO15933038 
{

    private static int[] hexStringToIntArray(String s) 
    {
        int len = s.length();
        int[] data = new int[len / 2];
        for (int i=0; i<len; i+=2) {
            data[i / 2] =  ((Character.digit(s.charAt(i), 16) << 4)
                           + Character.digit(s.charAt(i+1), 16));
        }
        return data;
    }

    private static String intArrayToHexString(int[] a)
    {
        StringBuilder sb = new StringBuilder(a.length);
        for (int i=0; i<a.length; i++)
        {
            sb.append((char) a[i]);
        }
        return sb.toString();
    }

    public static String Decrypt(String encrypted, int key1, int key2, int key3)
    {
        int[] input = hexStringToIntArray(encrypted);
        int[] output = new int[input.length];
        for (int i=0; i<output.length; i++)
        {
            output[i] = input[i]^(key1>>8) & 0xff;
            key1 = ((input[i]+key1)*key2+key3) & 0xffff;
        }
        return intArrayToHexString(output);
    }

    public static void main(String[] args) 
    {
        System.out.println(Decrypt("41db791e06a9", 111, 222, 333));
    }
}

This is probably the lamest piece of Java ever written. Together with the answer to your previous question, I have now written two Java programs.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you. I owe you for your answer and I will study java language more.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.