android - 在 Kotlin 中生成 HMAC-SHA1 签名
问题描述
我正在尝试使用他们的 API 从数据库中获取产品。
文档内容如下:
The "signature" is an encrypted version of the UPC or EAN code that is SHA-1 hashed with your authorization key
我曾尝试在 Kotlin 中执行此操作,并且正在返回“无效签名”。
object HmacSha1Signature {
private val HMAC_SHA1_ALGORITHM = "HmacSHA1"
private fun toHexString(bytes: ByteArray): String {
val formatter = Formatter()
for (b in bytes) {
formatter.format("%02x", b)
}
return formatter.toString()
}
@Throws(SignatureException::class, NoSuchAlgorithmException::class, InvalidKeyException::class)
fun calculateRFC2104HMAC(data: String, key: String): String {
val encoder = Base64.getEncoder()
// get an hmac_sha1 key from the raw key bytes
val signingKey = SecretKeySpec(key.toByteArray(), "HmacSHA1")
// get an hmac_sha1 Mac instance and initialize with the signing key
val mac = Mac.getInstance("HmacSHA1")
mac.init(signingKey)
// compute the hmac on input data bytes
val rawHmac = mac.doFinal(data.toByteArray())
return encoder.encodeToString(rawHmac)
}
}
URL 的格式是正确的,因为它表示签名无效。
我相信它需要 64 位编码。因为他们提供了其他语言的示例,似乎是除 Java 之外的所有示例 :(
C#
private string GetDigitEyesVerificationCode(string UpcCode) {
var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(AuthKey));
var m = hmac.ComputeHash(Encoding.UTF8.GetBytes(UpcCode));
return Convert.ToBase64String(m);
}
解决方案
推荐阅读
- r - data.table :根据 group_vars 和组顺序创建组 ID
- c# - 移动身份帐户页面
- php - 从 PHP 中的多维数组中搜索键
- javascript - ESLint 希望 setSate 作为 useEffect 的依赖项,但这会导致无限循环(react-hooks/exhaustive-deps)
- c - 无法使用 sudo 访问 /dev/mem
- html - Shell中的文本文件到HTML表格格式
- silverstripe - SilverStripe SQLSelect where 子句或 where 或 where in
- c# - 如何联合两个 Observable?
- javascript - 为什么跳过这个 Javascript 函数而不抛出错误?
- python - 更快的字节数组列表理解/转换?