使用情景
安卓手机调用腾讯ocr识别文字
难点
签名方法 v3 (TC3-HMAC-SHA256)
代码讲解
- 导入java类
importClass(java.nio.charset.Charset); importClass(java.nio.charset.StandardCharsets); importClass(java.security.MessageDigest); importClass(java.text.SimpleDateFormat); importClass(java.util.TimeZone); importClass(javax.crypto.Mac); importClass(javax.crypto.spec.SecretKeySpec);
- 初始化所有的参数,
SECRET_ID
和SECRET_KEY
请改为自己的.
let SECRET_ID = "XXX"; let SECRET_KEY = "XXX"; let service = "ocr"; let host = "ocr.tencentcloudapi.com"; let region = "ap-guangzhou"; let action = "GeneralAccurateOCR"; let version = "2018-11-19"; let algorithm = "TC3-HMAC-SHA256"; let UTF8 = StandardCharsets.UTF_8; const timestamp = getTime();
- 识别文字
let dataList = ocr(imgPath);
- 显示识别的数据
showData(dataList, imgPath, "腾讯");
签名计算过程
- 拼接规范请求串
let hashedRequestPayload = sha256Hex(payload); let canonicalRequest = httpRequestMethod + "\n" + canonicalUri + "\n" + canonicalQueryString + "\n" + canonicalHeaders + "\n" + signedHeaders + "\n" + hashedRequestPayload;
- 拼接待签名字符串
let credentialScope = date + "/" + service + "/" + "tc3_request"; let hashedCanonicalRequest = sha256Hex(canonicalRequest); let stringToSign = algorithm + "\n" + timestamp + "\n" + credentialScope + "\n" + hashedCanonicalRequest;
- 计算签名
let secretDate = hmac256(java.lang.String("TC3" + SECRET_KEY).getBytes(UTF8), date); let secretService = hmac256(secretDate, service); let secretSigning = hmac256(secretService, "tc3_request"); let signature = byteArrayToHexString(secretSigning); signature = hmac256(secretSigning, stringToSign); signature = byteArrayToHexString(signature);
- 拼接 Authorization
let authorization = algorithm + " " + "Credential=" + SECRET_ID + "/" + credentialScope + ", " + "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature;
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问 --- 牙叔教程
声明
部分内容来自网络 本教程仅用于学习, 禁止用于其他用途