xiaolin9966 发表于 2021-4-21 01:44

国外某APP签名算法,来个大神给翻一下这句代码的意思

最近在学习,请给翻译下运行流程,谢谢
public String getSignature(String str, String str2) throws GeneralSecurityException {
      String hMacSHA256 = getHMacSHA256(str, str2, 0);
      if (hMacSHA256 != null) {
            return hMacSHA256;
      }
      throw new GeneralSecurityException();
    }

    private String getHMacSHA256(String str, String str2, int i) {
      if (i > 1) {
            return null;
      }
      try {
            SecretKeySpec secretKeySpec = new SecretKeySpec(str2.getBytes("UTF-8"), "HmacSHA256");
            Mac instance = Mac.getInstance("HmacSHA256");
            instance.init(secretKeySpec);
            return toHex(instance.doFinal(str.getBytes("UTF-8")));
      } catch (Exception e) {
            if (i == 1) {
                HSLogger.f(TAG, "Could not generate mac signature: " + e.getLocalizedMessage() + ", retryCount: " + i, e, new ILogExtrasModel);
            } else {
                HSLogger.e(TAG, "Could not generate mac signature: " + e.getLocalizedMessage() + ", retryCount: " + i, e);
            }
            return getHMacSHA256(str, str2, i + 1);
      }
    }

    private String toHex(byte[] bArr) {
      char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
      char[] cArr2 = new char[(bArr.length * 2)];
      for (int i = 0; i < bArr.length; i++) {
            int i2 = bArr & 255;
            int i3 = i * 2;
            cArr2 = cArr;
            cArr2 = cArr;
      }
      return new String(cArr2);
    }
}

ofo 发表于 2021-4-21 08:19

getHMacSHA256(str, str2, 0)

xeonfeng 发表于 2021-4-21 08:40

用途同下面这个函数。
void hmac_sha256_get(uint8_t digest, uint8_t *message, int message_length, uint8_t *key, int key_length);
/*此函数用于HMAC_SHA256加密,秘钥任意长度,输出32字节*/

laos 发表于 2021-4-21 08:43

流程好像也没啥

String hMacSHA256 = getHMacSHA256(str, str2, 0);
调用getHMacSHA256方法对输入的字符串str进行HmacSha256, 密钥为str2

getHMacSHA256(String str, String str2, int i)
HmacSha256的算法实现过程并对结果以十六进制字符串形式输出捕获到异常会进行重试 重试次数i大于1直接返回NULL

佚名RJ 发表于 2021-4-21 08:49

Frida Hook 它试试
private String toHex(byte[] bArr) {
      char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
      char[] cArr2 = new char[(bArr.length * 2)];
      for (int i = 0; i < bArr.length; i++) {
            int i2 = bArr & 255;
            int i3 = i * 2;
            cArr2 = cArr;
            cArr2 = cArr;
      }
      return new String(cArr2);
    }

lycgood123 发表于 2021-4-21 08:50

非常感谢分享,学习学习。

不一般 发表于 2021-4-21 10:06

HmacSHA256(原始文本,加密密钥)
好像是这样的{:1_926:}

不一般 发表于 2021-4-21 10:08

佚名RJ 发表于 2021-4-21 08:49
Frida Hook 它试试
private String toHex(byte[] bArr) {
      char[] cArr = ...

传参是字节集,不能显示啊。

闷骚小贱男 发表于 2021-4-21 12:06

不一般 发表于 2021-4-21 10:08
传参是字节集,不能显示啊。

{:301_996:}他想说的应该是hook return吧

return new String(cArr2);

xiaolin9966 发表于 2021-4-21 12:32

闷骚小贱男 发表于 2021-4-21 12:06
他想说的应该是hook return吧

return new String(cArr2);

是的,就是看不懂这个加密过程有加盐吗
页: [1] 2
查看完整版本: 国外某APP签名算法,来个大神给翻一下这句代码的意思