import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
import org.apache.log4j.Logger;
public class GenerateFingerprint {
private static final Logger logger = Logger.getLogger(GenerateFingerprint.class);
public static void main(String[] args) {
// provided by authorize.net
String transactionKey = "{transactionkey}";
// provided by authorize.net
String apiLoginId = "{apiloginid}";
String amount = "20";
// currency Code
String currencyCode = "USD";
try {
// generate timestamp in sequence number
long timeStamp = System.currentTimeMillis() / 1000;
// generate random sequence number
Random random = new Random();
long loginSequence = random.nextInt(100000000);
// section use java Cryptography functions to generate a fingerprint
// convert transaction key to Secret key object
SecretKey key = new SecretKeySpec(transactionKey.getBytes(), "HmacMD5");
// create a MAC object to generate the fingerprint using the HmacMD5 algorithm
Mac mac = Mac.getInstance("HmacMD5");
mac.init(key);
// add caret(^) between input values as per documented by authorizenet
String inputString = apiLoginId + "^" + loginSequence + "^" + timeStamp + "^" + amount + "^" + currencyCode;
// get String as bytes
byte[] inputBytes= inputString.getBytes();
// create digest from byte array
byte[] result = mac.doFinal(inputBytes);
// convert HMAC byte array to char array.
char[] resultCharArray = Hex.encodeHex(result);
// convert char array to string
String fingerprint = new String(resultCharArray);
logger.info("Login Sequence :: " + loginSequence);
logger.info("TimeStamp :: " + timeStamp);
logger.info("-----------------------------------------------");
logger.info("Fingerprint :: " + fingerprint);
logger.info("-----------------------------------------------");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
}
}