0

我有一个从 StackOverflow 上的另一篇文章中收集的预请求脚本,但我仍然收到无效凭据。

尝试仅使用 str_1 执行此操作,但它不起作用。不确定 request.data 应该做什么,因为它不断返回 NaN。我认为问题可能存在,但仍然不知所措。我尝试将所有变量转换为字符串,但仍然返回相同的错误。

URL = https://gateway.marvel.com/v1/public/characters?ts= {{timeStamp}}&apikey={{apiKey}}&hash={{hash}}

// Access your env variables like this
var ts = new Date();
ts = ts.getUTCMilliseconds(); 

var str_1 = ts + environment.apiKey + environment.privateKey;  

// Or get your request parameters
var str_2 = request.data["timeStamp"] + request.data["apiKey"];
console.log('str_2 = ' + str_2); 

// Use the CryptoJS
var hash = CryptoJS.MD5(str_1).toString(); 

// Set the new environment variable

pm.environment.set('timeStamp', ts); 
pm.environment.set('hash', hash);

{ "code": "InvalidCredentials", "message": "该哈希、时间戳和密钥组合无效。" }

4

2 回答 2

2

如果有人可以评论为什么这是解决方案,我将不胜感激。这就是问题所在。哈希的顺序实际上很重要。因此不得不将 pvtkey + pubkey 的顺序翻转为 pubkey + pvtkey。为什么是这样?

不正确

var message = ts+pubkey+pvtkey;
var a = CryptoJS.MD5(message);
pm.environment.set("hash", a.toString());

正确的

var message = ts+pvtkey+pubkey;  
var a = CryptoJS.MD5(message); 
pm.environment.set("hash", a.toString());
于 2019-07-28T04:11:28.693 回答
0
  1. 我在 Android Studio 中创建了一个名为 MD5Hash 的新 java 类,遵循https://javarevisited.blogspot.com/2013/03/generate-md5-hash-in-java-string-byte-array-example-tutorial的步骤.html 我只是简化了他(她)的代码,只是为了将它与 Java 实用程序 MessageDigest 一起使用

    public class MD5Hash {
    
       public static void main(String args[]) {
    
           String publickey = "abcdef";    //your api key
           String  privatekey = "123456"; //your private key
    
           Calendar calendar=Calendar.getInstance();
    
           String stringToHash = calendar
                                .getTimeInMillis()+ privatekey + publickey;
    
           System.out.println("hash : " + md5Java(stringToHash));
           System.out.println("ts : "+   calendar.getTimeInMillis());
    
      }
    
      public static String md5Java(String message){
    
          String digest = null;
          try {
              MessageDigest md = MessageDigest.getInstance("MD5");
              byte[] hash = md.digest(message.getBytes("UTF-8"));
              //converting byte array to Hexadecimal String
              StringBuilder sb = new StringBuilder(2*hash.length);
              for(byte b : hash){
                  sb.append(String.format("%02x", b&0xff));
              }
              digest = sb.toString();
              } catch (UnsupportedEncodingException ex) {
              } catch (NoSuchAlgorithmException ex) {
              }
          return digest;
      }
    
    }
    

如您所见,如果您复制粘贴此代码,它在类声明的左侧有一个绿色箭头,单击它您可以运行 MD5Hash.main() 并且您将在运行屏幕中打印时间(ts)和散列。

  1. 然后直接上网验证:

https://gateway.marvel.com/v1/public/characters?limit=20&ts=1574945782067&apikey=abcdef&hash=4bbb5dtf899th5132hjj66

于 2019-11-28T22:51:36.463 回答