首页 > 解决方案 > 我正在集成一个 android API,在以下情况下生成 xwsse 令牌

问题描述

我在我的 android 应用程序中集成了一个 API,在以下情况下无法生成 XWSSE 令牌:

来自 PHP:

  1. 令牌
  2. 用户名

安卓:

  1. 时间戳
  2. 10位随机数
  3. 连接两者
  4. SHA 1 代。
  5. 使这个 SHA1 大写,这给了我们 NONCE。
  6. 我们收到的 Nonce + Timestamp + token 又是 concat
  7. Base64 转换。
  8. 再次生成SHA1。 (目前它得到 40 个字符的结果(它应该是 20 个字符的二进制))
  9. 以 base64 编码。(这将得到一个PasswordDigest,它应该是 28 个字符,我们得到 56 个字符)

谁能建议在这里可以做些什么来获得 PasswordDigest 的 28 个字符?

标签: javaandroidkotlinsha1

解决方案


您必须使用Base64.encodeToString()函数来解决您的问题,有关详细信息,请参阅此答案

https://stackoverflow.com/a/4769110/5427353

您可以创建这样的函数来获得您想要的密码摘要的确切结果

private fun getSHA1(type: String, input: String): String {
     val bytes = input.toByteArray() //input should be (nonce + created + password)
     val md = MessageDigest.getInstance(type) //type should be "SHA-1".
     val digest = md.digest(bytes) // This returns the same string of bytes as $digest = sha1($input, true);

     var passwordDigest = Base64.encodeToString(digest,Base64.DEFAULT) //This returns 28 character password digest. same as base64_encode(sha1($input, true));

     return passwordDigest;
}

推荐阅读