java - 我正在集成一个 android API,在以下情况下生成 xwsse 令牌
问题描述
我在我的 android 应用程序中集成了一个 API,在以下情况下无法生成 XWSSE 令牌:
来自 PHP:
- 令牌
- 用户名
安卓:
- 时间戳
- 10位随机数
- 连接两者
- SHA 1 代。
- 使这个 SHA1 大写,这给了我们 NONCE。
- 我们收到的 Nonce + Timestamp + token 又是 concat
- Base64 转换。
- 再次生成SHA1。 (目前它得到 40 个字符的结果(它应该是 20 个字符的二进制))
- 以 base64 编码。(这将得到一个PasswordDigest,它应该是 28 个字符,我们得到 56 个字符)
谁能建议在这里可以做些什么来获得 PasswordDigest 的 28 个字符?
解决方案
您必须使用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;
}
推荐阅读
- c++ - C++ 协程:从最终挂起点调用“handle.destroy”是否有效?
- excel - 在 vba excel 中将日期与 DateTime.Now 进行比较
- python - Python Selenium - 禁用镀铬标签睡眠/休眠
- pandas - Pandas 中的重复测量方差分析,不同列中的因变量值
- scala - 带有 Spylon-Kernel 的 Jupyter 中 spark.implicits._ 的问题
- python - 如何从图像中删除相邻的重复像素?
- sql - 对行进行分组,同时排除特定列上的空值并聚合另一个
- typescript - TypeScript:如何初始化依赖于 T 的通用类的成员?
- typo3 - TYPO3 10.4.12 optionSplit in IMAGE srcset
- r - 循环数据框的列