求类似java的hmac-sha1算法的delphi代码例子。
/*
* 生成签名
* @param method HTTP请求方法 "get" / "post" //参数1:请求方式的字符串值
* @param url_path CGI名字, //参数2:api的相对URL的字符串值
* @param params URL请求参数 //参数3:由request的请求名和值,构成的hashmap数据类型值
* @param secret 密钥 //参数4:用户网站的appkey的字符串值
* @return 签名值 //返回值,对请求值进行hmac-sha1加密算法的计算返回值。
* @throws OpensnsException 不支持指定编码以及不支持指定的加密方法时抛出异常。
*/
private String makeSign(String method, String url_path, HashMap<String, String> params, String secret) throws OpenApiException {
String sig = "";
try {
Mac mac = Mac.getInstance("HmacSHA1"); //1 得到一个是hmacsha1的mac对象
SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(charset), mac.getAlgorithm()); //2 创建secretKey对象
mac.init(secretKey); //3 用secretkey对象,初始化mac对象。
String mk = makeSource(method, url_path, params); //4 输入method、url_path,parms参数,得到源名码
System.out.println(mk);
byte[] hash = mac.doFinal(mk.getBytes(charset)); //5 用mac对源名码加密,得到byte数组
sig = new String(Base64Coder.encode(hash)); //6 encode编码,然后转化为string输出值
// sig = encodeUrl(sig);
} catch (Exception e) {
throw new OpenApiException(OpenApiException.MAKE_SIGNATURE_ERROR, e);
}
return sig;
}
输入post/get 的string值、相对api的url string值、hashmap方式的request值、appkey的string值,经过hmac算法,得到计算的密码值。
源名码=源明码