pythonCryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256时签名错误,python签名如何与postman保持一致?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pythonCryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256时签名错误,python签名如何与postman保持一致?相关的知识,希望对你有一定的参考价值。

postman下:
var ts = Math.round(new Date() / 1000);
pm.environment.set('ts', ts);
var appId = '14';

eval(postman.getGlobalVariable("forgeJS"));

var signature = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(appId+ts,'123456')).toString().toUpperCase();
pm.environment.set("signature", signature);
pm.environment.set("appId", appId);

python下:
appId = '14'
app_secretStart = '123456'
t = time.time()
ts = int(round(t))
appkey = bytes(str(appId)+str(ts),'utf-8')
app_secret = bytes(str(app_secretStart),'utf-8')

# 签名
signature = base64.b64encode(hmac.new(appkey, app_secret, digestmod=hashlib.sha256).digest()).decode()

print(signature)

两者的签名不一致,如何使python的签名与postman里面的签名保持一致?

    = CryptoJS.HmacSHA256(stringSign, key); 4.加密 //我这里是使用16进制的方法 具体API 可以打印CryptoJS.enc let hashInHex= CryptoJS.enc.Hex.stringify(hash);

参考技术A 这种方法: var hash = CryptoJS.HmacMD5("Message", "Secret Passphrase");var hash = CryptoJS.HmacSHA1("Message", "Secret Passphrase");var hash = CryptoJS...

第十一周课程总结

第十一周课程总结

这一周只要是学习图形界面。在Java中的操作界面中,图形用户界面编程主要有以下几个特征:

  • 1)图形界面及其框架(图形界面对象之间的包含关系)。

  • 2)图形界面对象的布局(图形界面之间的位置关系)。

  • 3)图形界面对象上的事件响应(图形界面对象上的动作)。

    在Java的图形界面开发中可以使用的技术有AWT和Swing两种。但是在AWT中大量的使用了Windows的系统函数,不是使用Java开发的,所以是重量级组件;而Swing是由Java来实现用户界面类,可以在任意的系统平台上工作,属于轻量级组件,但是在Swing中任然大量使用了AWT的概念。

    一、AWT

    AWT抽象窗口工具包,是Java提供的用来建立和设置Java图形用户界面的基本工具,在整个AWT包中提供的所有工具类主要分为:组件(Component)、容器(Container)、布局管理器(Layout Manager)。

    二、Swing

    在Java中提供了轻量级的图形界面组件——Swing,Swing使用Java语言实现,是以AWT平台为基础构建起来的新组件,直接使用Swing可以更加轻松地构建用户界面。

    三、基本容器JFrame

    如果现在使用Swing创建一个窗口,则直接使用JFrame类即可,此类是Component的子类,常用的操作方法:

    技术图片
package javabook;

import java.awt.*;
import javax.swing.*;

public class JavaSwing {

    public static void main(String[] args) {
        JFrame f=new JFrame("图形界面");          //实例化一个窗口
        Dimension d=new Dimension(600,480);          //实例化Dimension对象来控制窗口大小
        f.setSize(d);                                 
        f.setBackground(Color.WHITE);                 //设置窗口的背景颜色
        Point p=new Point(300,200);                  //设置显示坐标
        f.setLocation(p);                             //显示位置
        f.setVisible(true);                          //让组件显示
    }

}

四、标签组件JLabel

JLabel组件表示的是一个标签,本身是用于显示信息的,一般情况下是不能直接更改其显示内容的。创建完Label对象可以通过Container类中的add()方法加入到容器中。

package javabook;

import java.awt.*;
import javax.swing.*;

import javax.swing.JFrame;

public class JavaSwing2 {

    public static void main(String[] args) {
        JFrame f=new JFrame("图形界面");          //实例化一个窗口
        JLabel lab=new JLabel("java",JLabel.CENTER);         //实例化对象,使用居中对齐
        f.add(lab);                                 //向容器中加入组件
        Dimension d=new Dimension(600,480);          //实例化Dimension对象来控制窗口大小
        f.setSize(d);                                 
        f.setBackground(Color.WHITE);                 //设置窗口的背景颜色
        Point p=new Point(300,200);                  //设置显示坐标
        f.setLocation(p);                             //显示位置
        f.setVisible(true);  

    }

}

五、更改JLabel的文字样式

以上的内容只是使用了默认的字体和颜色显示,如果现在要想更改使用的字体,则可以直接使用Component类中定义的方法;

Public void setFont(Font f)
package javabook;

import java.awt.*;
import javax.swing.*;

public class JavaSwing3 {

    public static void main(String[] args) {
        JFrame f=new JFrame("图形界面");          //实例化一个窗口
        JLabel lab=new JLabel("java",JLabel.CENTER);         //实例化对象,使用居中对齐
        f.add(lab);                                 //向容器中加入组件
        Font fnt=new Font("Serief",Font.ITALIC+Font.BOLD,28);         //实例化对象
        lab.setFont(fnt);                                       //显示标签
        lab.setForeground(Color.RED);                             //设置标签颜色
        Dimension d=new Dimension(600,480);          //实例化Dimension对象来控制窗口大小
        f.setSize(d);                                 
        f.setBackground(Color.WHITE);                 //设置窗口的背景颜色
        Point p=new Point(300,200);                  //设置显示坐标
        f.setLocation(p);                             //显示位置
        f.setVisible(true);  


    }

}

六、布局管理器

了解了举办的窗口以及组件后,可以发现,如果不对窗口见习版面设计,则一个组件会直接充满整个窗口,所以在Java中专门提供了布局管理器来管理组件,通常布局管理器可以用不同的方式排列组件。每当需要重新调整屏幕大小或重新绘制屏幕上任一项时,都要用到布局管理器。在Swing中使用的所有布局管理器都实现Layout Manager接口,在Swing中主要使用5种常见的布局管理器:FlowLayout、BorderLayout、GridLayout、CardLayout、绝对定位。

  • 1、FlowLayout
    属于流式布局管理器,使用此种布局管理器方式会使所有的组件像流水一样依次进行排序。
package javabook;

import java.awt.*;
import javax.swing.*;
        
public class JavaFlowLayout {

    public static void main(String[] args) {
        JFrame f=new JFrame("图形界面");          //实例化一个窗口
        //设置窗体中布局管理器为FlowLayout,所有的组件居中对齐,水平和垂直间距为3
        f.setLayout(new FlowLayout(FlowLayout.CENTER,3,3));
        for(int i=0;i<9;i++) {
            JButton but=new JButton("按钮-"+i);
            f.add(but);
        }
        Point p=new Point(600,200);                  //设置显示坐标
        f.setLocation(p);                             //显示位置
        f.setVisible(true);  
        
    }

}
  • 2、BorderLayout
    将一个窗口的版面划分为东西南北中五个区域,可以直接将需要的组件放到这五个区域中。

  • 3、GridLayout
    布局管理器是以表格的形式进行管理的,在使用此布局管理器说的时候必须设置显示的行和列数。
package javabook;

import java.awt.*;
import javax.swing.*;

public class JavaGridLayout {

    public static void main(String[] args) {
        JFrame f=new JFrame("图形界面");          //实例化一个窗口
        //设置窗体中布局管理器为GdriLayout,按3X5排列,水平和垂直间距为3
        f.setLayout(new GridLayout(3,5,3,3));
        for(int i=0;i<13;i++) {
            JButton but=new JButton("按钮-"+i);
            f.add(but);
        }
        f.pack();
        Point p=new Point(600,200);                  //设置显示坐标
        f.setLocation(p); 
        f.setVisible(true); 
    }

}
  • 4、CardLayout
    就是将一组组彼此重叠的进行布局,就像一张张卡片一样,这样每一次只会展示一个界面。

  • 5、绝对定位
    如果不想在窗口中指定布局管理器,也可以通过设置绝对坐标的方式完成布局,在Component中提供了setBounds()方法,可以定位一个组件的坐标,使用x,y的坐标表示方法。

以上是关于pythonCryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256时签名错误,python签名如何与postman保持一致?的主要内容,如果未能解决你的问题,请参考以下文章