I am trying to call this machine translation api: http://ai.sogou.com/ai-docs/api/sign. But I come across a problem generating the signature.
So I decided to use inline java code to do this.
Putting the arguments directly in this java code to call is fine and returns the right result: vuVEkzcnUeFv8FxeWS50c7S0HaYH1QKgtIV5xrxDY/s=
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
But when passing the arguments using javaobject, the result is different: zgXLSfsTi/WMWO7OWQhWLWPOk8jeS+nEWuoPB8KLMz8=
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
			
			So I decided to use inline java code to do this.
Putting the arguments directly in this java code to call is fine and returns the right result: vuVEkzcnUeFv8FxeWS50c7S0HaYH1QKgtIV5xrxDY/s=
			
				B4X:
			
		
		
		sha256_HMAC("sac-auth-v1/bTkALtTB9x6GAxmFi9wetAGH/1491810516/3600\nPOST\napi.ai.sogou.com\n/speech/asr\nidx=1&starttime=1491810516&type=gbk","PMROwlieALT36qfdGClVz2iH4Sv8xZxe");But when passing the arguments using javaobject, the result is different: zgXLSfsTi/WMWO7OWQhWLWPOk8jeS+nEWuoPB8KLMz8=
			
				B4X:
			
		
		
		Sub getSignatureUsingInlineJava(prefix As String,secretKey As String,params As String) As String
    Dim combined As String
    combined=$"sac-auth-v1/bTkALtTB9x6GAxmFi9wetAGH/1491810516/3600\nPOST\napi.ai.sogou.com\n/speech/asr\nidx=1&starttime=1491810516&type=gbk"$
    secretKey=$"PMROwlieALT36qfdGClVz2iH4Sv8xZxe"$
    Dim jo As JavaObject
    jo=asJO(Me)
    Return jo.RunMethod("getSignature",Array As String(combined,secretKey))
End Sub
Sub getSignature(prefix As String,secretKey As String,params As String) As String
  
    Dim mactool As Mac
    Dim k As KeyGenerator
    k.Initialize("HmacSHA256")
    Dim combined As String=prefix&"\nPOST\napi.ai.sogou.com\n/pub/nlp/fanyi\n"¶ms
    combined=$"sac-auth-v1/bTkALtTB9x6GAxmFi9wetAGH/1491810516/3600\nPOST\napi.ai.sogou.com\n/speech/asr\nidx=1&starttime=1491810516&type=gbk"$
    secretKey=$"PMROwlieALT36qfdGClVz2iH4Sv8xZxe"$
    k.KeyFromBytes(secretKey.GetBytes("UTF-8"))
    mactool.Initialise("HmacSHA256",k.Key)
    mactool.Update(combined.GetBytes("UTF-8"))
    Dim bb() As Byte
    bb=mactool.Sign
    Dim base As Base64
    Dim sign As String=base.EncodeBtoS(bb,0,bb.Length)
    Log("sign"&sign)
    Return sign
End Sub
Sub getMap(key As String,parentmap As Map) As Map
    Return parentmap.Get(key)
End Sub
Sub asJO(o As JavaObject) As JavaObject
    Return o
End Sub
#If JAVA
import java.nio.charset.StandardCharsets;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public static String getSignature(String message, String secretKey){
    // return sha256_HMAC("sac-auth-v1/bTkALtTB9x6GAxmFi9wetAGH/1491810516/3600\nPOST\napi.ai.sogou.com\n/speech/asr\nidx=1&starttime=1491810516&type=gbk","PMROwlieALT36qfdGClVz2iH4Sv8xZxe");
    return sha256_HMAC(message,secretKey);
}
public static String sha256_HMAC(String message, String secretKey) {
    System.out.println(message);
    System.out.println(secretKey);
    byte[] secret;
    secret=secretKey.getBytes(StandardCharsets.UTF_8);
    String hash = "";
    try {
        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret_key = new SecretKeySpec(secret, "HmacSHA256");
        sha256_HMAC.init(secret_key);
        byte[] bytes = sha256_HMAC.doFinal(message.getBytes(StandardCharsets.UTF_8));
        hash = new String(java.util.Base64.getEncoder().encode(bytes), StandardCharsets.UTF_8);
        System.out.println(hash);
    } catch (Exception e) {
        System.out.println("Error HmacSHA256 ===========" + e.getMessage());
    }
    return hash;
}
#End If
			
				Last edited: 
			
		
	
								
								
									
	
		
			
		
	
								
							
							 
				 
 
		 
 
		 
 
		 
 
		