2011-12-16 8 views
1

このjavaコードをforce.com apexで変換する必要があります。私はCryptoクラスを使用して同じ暗号化を取得しようとしましたが、APEXの最後の変数 "fingerprintHash"に対して同じ値を得る方法が得られませんでした。誰もこの技術的な問題で私を助けることができますか?Java暗号化とForce.com頂点暗号化

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'); 

答えて

5

問題はjavasideに出力を進エンコードされていることであるように見えるだろうが、頂点側の出力をコード化するbase64では、迅速な回答に感謝@LanceySnr代わりEncodingUtils.base64Encode

+0

それはうまく働いています – gaurav

0

あなたはしかし、あなたが一部としてタイムスタンプを使用している、暗号化に関して右側の線に沿って向かっているようにあなたが見えますあなたの入力文字列のうち、あなたが天文学的に幸運でない限り、あなたは常に異なる文字列をエンコードしています。コードの移植作業中は、入力文字列が同じであることを確認できるようにタイムスタンプを削除します。同じ文字列でない場合は、同じ結果を得ることはありません。

暗号化が正常に機能していることが確認できたら、元のJavaコードと同じように機能するという知識のもとでタイムスタンプを安全なコードに戻すことができます。

+0

EncodingUtils.convertToHexを使用してみてください。私はどのように私は彼らがjavaに格納されているように頂点で指紋のハッシュ値を格納することができません。 – gaurav

+0

ああ、このループを意味しますか: for(int i = 0; i

+0

ありがとうございました。今問題解決しました – gaurav