最近做一个项目,登录接口的账号密码两个参数后端规定的是用国密SM4来加密,以前从来没用过这个方法,也百度了一下,但文章了了无几,而且基本内容都是一样的,因为这种加密方式大部分都是java用来加密的,百度上关于SM4加密的大部分都是说的java如何实现,但关于javascript如何加密就只看到有一个js代码,是一个大佬根据java的代码改编的,但不知道为啥使用这个代码加密出来的数据后台解密不了,后端是用java写的,人家把他加密的结果给我发过来,答案不一样,这就尬住了。这个项目安卓和ios早都写完了,所以让后端来更改加密方式不到万不得已是不可能的,给我卡了一整天,终于和同事大量的翻找文章找到一个包,最后试验了一下可以使用,是在vue中使用的。
这里先给放上这个包:http://npm.taobao.org/package/gm-crypt
1.首先先安装这个包 :$ npm install gm-crypt ;
2.然后在登录的函数中引用:如下

export default {
  components: {},
  props: {},
  data() {
    return {
      Account: "", //用户账号
      Pwd: "", //用户密码
      time: ""
    };
  },
  computed: {},
  created() {},
  watch: {},
  methods: {
    // 登录
    login() {
      // 引用sm4包进行加密
      const SM4 = require("gm-crypt").sm4;
      let sm4Config = {
        //配置sm4参数
        key: "HENG1AN2WEN3YIN4",//这里这个key值是跟后端要的
        mode: "ecb", // 加密的方式有两种,ecb和cbc两种,也是看后端如何定义的,不过要是cbc的话下面还要加一个iv的参数,ecb不用
        cipherType: "base64" // 
      };

      let sm4 = new SM4(sm4Config);//这里new一个函数,将上面的sm4Config作为参数传递进去。然后就可以开心的加密了
      let Account = sm4.encrypt(this.Account); //账号加密
      let Pwd = sm4.encrypt(this.Pwd); //密码加密

      // 获取当前时间。
      var CurrentTime = new Date().getTime();
      // 将code用shal加密
      var code = Account + CurrentTime + "697aa419a779a3b9e5e1ba1a2d83f89c";
      var VerifyCode = shal.hex_sha1(code).toUpperCase(); //code码

下面的代码就是请求了,就没放上,下面的那个code码是用shal来加密的,账号密码是用SM4来加密的。希望对小伙伴们有所帮助。

Logo

前往低代码交流专区

更多推荐