carson1978 2015-05-14 08:53 采纳率: 100%
浏览 2053
已采纳

签名算法,java代码转为 C#

请帮忙把如下的java签名算法转换为c#的,牛人伸手啊!!

具体代码如下:
public static String genSignature(String sk, String stringToSign) {
String signature = "";

    try {
        String encodedSign = URLEncoder.encode(stringToSign, ENCODING);
        try {
            Mac mac = Mac.getInstance(HASH);
            mac.init(new SecretKeySpec(sk.getBytes(ENCODING), HASH));
            byte[] hashData = mac.doFinal(encodedSign.getBytes(ENCODING));

            StringBuilder sb = new StringBuilder(hashData.length * 2);
            for (byte data : hashData) {
                String hex = Integer.toHexString(data & 0xFF);
                if (hex.length() == 1) {
                    // append leading zero
                    sb.append("0");
                }
                sb.append(hex);
            }
            signature = sb.toString().toLowerCase();
        } catch (Exception e) {
            logger.warn("sha256 exception for[" + sk + "," + stringToSign + "]. e:", e);
        }
    } catch (UnsupportedEncodingException e) {
        logger.warn("encode error, string[" + stringToSign + "] e:" + e);
    }

    return signature;
}
  • 写回答

4条回答 默认 最新

  • carson1978 2015-05-15 02:11
    关注

    已经解决,代码如下:
    public static string genSignature(string sk,string data)
    {
    UTF8Encoding enc = new UTF8Encoding();
    byte[] secretKey = enc.GetBytes(sk);
    HMACSHA256 hmac = new HMACSHA256(secretKey);
    hmac.Initialize();

            byte[] bytes = enc.GetBytes(data);
            byte[] hashBytes = hmac.ComputeHash(bytes);
    
            StringBuilder sb = new StringBuilder();
    
            for (int i = 0; i < hashBytes.Length; i++)
            {
                string hex = (hashBytes[i] & 0xFF).ToString("x");
                if (hex.Length == 1)
                {
                    sb.Append("0");
                }
                sb.Append(hex);
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站