支付宝某个鉴权文档中,有段 Java 代码样例,本人 Python 写的比较多, Java 不太熟,想转成 Python 代码

2022-11-27 17:37:51 +08:00
 U87

接主题,java 代码如下:

public String getCheckSum(String requestBody, String appSecret, String time) {

String md5Digest = MessageDigestUtils.md5Digest(requestBody); 
String checksum = MessageDigestUtils.sha1Digest(appSecret, md5Digest, time);

return checksum;

}

public class MessageDigestUtils {

private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

private MessageDigestUtils() {
}

public static String md5Digest(String input) {
    StringBuilder hexValue = new StringBuilder();

    try {

        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] md5Bytes = md5.digest(input.getBytes(StandardCharsets.UTF_8));

        for (byte md5Byte : md5Bytes) {
            int val = ((int) md5Byte) & 0xff;
            if (val < 16) {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
    } catch (Exception e) {
        
    }

    return hexValue.toString();
}

public static String sha1Digest(String appSecret, String nonce, String time) {
    String content = appSecret + nonce + time;
    try {
        MessageDigest messageDigest = MessageDigest.getInstance("sha1");
        messageDigest.update(content.getBytes());
        return getFormattedText(messageDigest.digest());
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

private static String getFormattedText(byte[] bytes) {
    int len = bytes.length;
    StringBuilder buf = new StringBuilder(len * 2);
    for (int j = 0; j < len; j++) {
        buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
        buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
    }
    return buf.toString();
}

}

2164 次点击
所在节点    程序员
7 条回复
wiix
2022-11-27 17:51:12 +08:00
md5 和 sha1 总该认得吧?
getFormattedText 将原始 md5/sha1 转成 16 进制文本。
python 有自己的实现,用不着这些代码。
yankebupt
2022-11-27 19:38:15 +08:00
java 的库转完是个 byte[],得自己转字符串……
你 python 随便找个直出字符串的 md5 sha1 库,就懒得转了......
YepTen
2022-11-28 08:40:00 +08:00
你应该学点密码学的知识
blueorange
2022-11-28 09:14:10 +08:00
hashlib.md5("123".encode()).hexdigest()
blueorange
2022-11-28 09:14:40 +08:00
import hashlib
hashlib.sha1("123".encode()).hexdigest()
hashlib.md5("123".encode()).hexdigest()
bjzhush
2022-11-28 11:20:15 +08:00
这不就 md5 的 sha ,你用同样的输入交给这俩函数运行,看看 Python 的 md5 和 sha 的输出,对得上就验证成功了
feitxue
2022-11-28 22:27:02 +08:00
想起了当时客户对接的银行给的示例,是命令行方式加密,当时是翻译成 java 代码来搞。
嗯。怎么说呢,java 的 hutoo 真好用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/898290

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX