Шифрование Java и шифрование Force.com apex - PullRequest
1 голос
/ 16 декабря 2011

Мне нужно конвертировать этот Java-код в apex force.com. Я пытался использовать класс Crypto для получения того же шифрования, но не получал, как я могу получить то же значение для переменной «fingerprintHash» в последнем в APEX. Может ли кто-нибудь помочь мне в этом техническом вопросе?

Random generator = new Random();
sequence =Long.parseLong(sequence+""+generator.nextInt(1000));

timeStamp = System.currentTimeMillis() / 1000;

try {
    SecretKey key = new SecretKeySpec(transactionKey.getBytes(), "HmacMD5"); 
    Mac mac = Mac.getInstance("HmacMD5");
    mac.init(key);

    String inputstring = loginID + "^" + sequence + "^" + timeStamp + "^" + amount + "^";
    byte[] result = mac.doFinal(inputstring.getBytes());

    StringBuffer strbuf = new StringBuffer(result.length * 2);

    for (int i = 0; i < result.length; i++) {
        if (((int) result[i] & 0xff) < 0x10) {
            strbuf.append("0");
        }

        strbuf.append(Long.toString((int) result[i] & 0xff, 16));
    }

    fingerprintHash = strbuf.toString(); //need this result for variable x_fp_hash 

Код апекса, который я пробовал: -

String API_Login_Id='6########';
String TXn_Key='6###############';
String amount='55';
sequence = '300';

long timeStamp = System.currentTimeMillis()/1000;

String inputStr = API_Login_Id + '^' + sequence + '^' + timeStamp + '^' + amount + '^';
String algorithmName = 'hmacMD5';

Blob mac = Crypto.generateMac(algorithmName,Blob.valueOf(inputStr),Blob.valueOf( TXn_Key));
String macUrl =EncodingUtil.urlEncode(EncodingUtil.base64Encode(mac), 'UTF-8');

Ответы [ 2 ]

5 голосов
/ 16 декабря 2011

Может показаться, что проблема заключается в том, что вы используете шестнадцатеричное кодирование вывода на javaside, а base64 кодирует вывод на стороне апекса, попробуйте использовать EncodingUtils.convertToHex вместо EncodingUtils.base64Encode

0 голосов
/ 16 декабря 2011

Похоже, вы идете по верным линиям в отношении шифрования, однако вы используете метку времени как часть своей входной строки, и поэтому, если вам не астрономически повезло, вы всегда кодируете разные строки , Пока вы работаете над переносом кода, удалите временную метку, чтобы вы могли быть уверены, что ваши входные строки одинаковы - если они не совпадают, вы никогда не получите тот же результат.

Как только вы установили, что ваше шифрование работает должным образом, вы можете поместить временную метку обратно в безопасный код, зная, что она будет работать так же, как и исходный код Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...