In our previous tutorial we learn how to configure vuforia for Cloud recognition, in this tutorial we will learn about how to set encryption technique while hitting rest apis of Vuforia and in our next tutorial we will share the basic http request.
Step 1. First of all we will send http request in this method to get its type, Vuforia apis uses post method of http with multipart so we have to check that in request and set respective content type like multipart/form-data.
public String tmsSignature(HttpUriRequest request, String secretKey) {
String method = request.getMethod();
String contentType = "";
String hexDigest = "d41d8cd98f00b204e9800998ecf8427e"; // Hex digest of an empty string
if (method.equalsIgnoreCase("GET") || method.equalsIgnoreCase("DELETE")) {
// Do nothing because the strings are already set correctly
} else if (method.equalsIgnoreCase("POST") || method.equalsIgnoreCase("PUT")) {
contentType = "multipart/form-data";
// If this is a POST or PUT the request should have a request body
hexDigest = contentMD5((HttpEntityEnclosingRequestBase) request);
} else {
System.out.println("ERROR: Invalid content type passed to Sig Builder");
}
// Date in the header and date used to calculate the hash must be the same
String dateValue = request.getFirstHeader("Date").getValue();
Log.e("Date: ", dateValue);
String requestPath = request.getURI().getPath();
String toDigest = new String(method + "\n" + hexDigest + "\n" + contentType + "\n" + dateValue + "\n" + requestPath);
String shaHashed = "";
try {
shaHashed = calculateRFC2104HMAC(secretKey, toDigest);
Log.e("Signature", toDigest);
Log.e("hash Signature", shaHashed);
} catch (SignatureException e) {
e.printStackTrace();
}
return shaHashed;
}
Step 2. Now we will encrypt http request using md5 technique like this :
private String contentMD5(HttpEntityEnclosingRequestBase httpMethod) {
ByteArrayOutputStream requestOutputStream = new ByteArrayOutputStream();
try {
httpMethod.getEntity().writeTo(requestOutputStream);
} catch (IOException e) {
System.out.println("ERROR: IOException caught when writing Content MD5 hash");
e.printStackTrace();
}
return DigestUtils.md5Hex(requestOutputStream.toByteArray()).toLowerCase();
}
but for this you have to add some jar files to perform Digest Utils functions like md5Hex i.e commons-codec-1.3.jar
Step 3. Now calculate calculateRFC2104HMAC for secret key and the whole digest string :
public static String calculateRFC2104HMAC(String key, String data) throws SignatureException {
String result = "";
try {
// get an hmac_sha1 key from the raw key bytes
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");
// get an hmac_sha1 Mac instance and initialize with the signing key
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
// compute the hmac on input data bytes
byte[] rawHmac = mac.doFinal(data.getBytes());
// base64-encode the hmac
result = new String(Base64.encodeBase64(rawHmac, false));
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
With the help of these signature you can create same header mentioned in vuforia api here :
https://library.vuforia.com/articles/Solution/How-To-Perform-an-Image-Recognition-Query
0 Comment(s)