learn-vue [SM2(加-解密|加、验签)、SM4(加-解密)、Base64(加-解密)、MD5加密、RSA加/解密、加/解签]

1.SM2

1、项目根目录安装:SM2组件
    npm install --save sm-crypto
2、加、解密
    // 获取SM2对象
    const sm2 = require('sm-crypto').sm2;
    const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为1
    // 公钥
    var publicKeyServer = 'xxxxxxxxxxx';
    // 私钥
    var privateKeyWeb  = 'xxxxxxxx';
     
    //此处若把加密串a给服务端则加上 04+a
    var a=sm2.doEncrypt('SM2加解密注意事项', publicKeyServer, 1)
     console.log("SM2加密内容:"+a);
     
    //如果自己前端解密后端返回的带有04开头的字符串则去掉04后解密
    var b=sm2.doDecrypt(a,privateKeyWeb,1) // 解密结果
    console.log("sm2解密内容:"+b);
3、 加、解签

    后端是java 用的依赖如下:
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.65</version>
    </dependency>
    
    目前的java的版本基本基于BC库的,新版的1.66BC库已经可以和其他语言互通了,
    它默认的返回是 {der: true, hash: true} 这种的,验的时候带上这个参数就可以了

    签名:sm2.doSignature(msg, privateKey, { hash:true, der:true }))

    验签:sm2.doVerifySignature(msg, vSign, publicKey, { hash:true, der:true })
4、加、解签,实列:

    const sm2 = require('sm-crypto').sm2;
    // 参与加签的密文
    const msg = '48656c6c6f20576f726c6420313432383537' 
    // 公钥 
    const publicKey ='04D3FD56FFAC7AFA6A39FF40A73BA2921F7AB723A59AA03B0914E893A544A69F4DCF8BB034BE4DF5072206FB01469F0F7F267A6B64CB5AA57BC564E18EA2EEDD1D'
    // 加签后的签文
    const vSign = '3045022100fb69fecb149ce9ae9115eb979803139cc9558c0e7bf512f994a1a16ddc8a2d6302205d40dc89e093e73a450160a44e25b1776fcc428f497500d59e476f5e46820ca2'
    // 验签
    const ver2 = sm2.doVerifySignature(msg, vSign, publicKey, { hash:true, der:true });
    
    console.log(ver2);

2.SM4

1、 项目根目录安装:Sm4 组件
    npm install gm-crypt
2、 加、解密
    // 获取SM4对象
    const SM4 = require("gm-crypt").sm4;
    //配置sm4参数
    let sm4Config = {
      key: "gDg4g8CQyIrs^bv2",   //这里这个key值是后端采用sm4加密的key
      mode: "ecb",               // 加密的方式有两种,ecb和cbc两种,
        //也是看后端如何定义的,不过要是cbc的话下面还要加一个iv的参数,ecb不用
      cipherType: "base64" // 后端选择Base64方式加密sm4加密结果至前端解密
    };
    // 初始化对象
    let sm4 = new SM4(sm4Config);
3、加、解密操作,实例:
    -- 加
    let con = sm4.encrypt("Hello World 9999");
    -- 解
    let t =sm4.decrypt(con);
4、加、解密实例:
    // sm4 加、解密
    const SM4 = require("gm-crypt").sm4;
    //配置sm4参数
    let sm4Config = {
        key: "SMF_KEY:14285789", //这里这个key值是跟后端要的
        mode: "ecb",// 加密的方式有两种,ecb和cbc两种,也是看后端如何定义的,
                    //不过要是cbc的话下面还要加一个iv的
        cipherType: "base64" // 后端选择Base64方式加密密文
    };
    let sm4 = new SM4(sm4Config);
    let con = sm4.encrypt("Hello World 9999");
    console.log("SM4-加密: "+con);
    let t =sm4.decrypt(con);
    console.log("SM4-解密: "+t)
    
5、概述
    sm4加密有两种模式:ecb和cbc。两种模式的区别如下(下面文字来自百度):

    一、优bai点不同:
    
    ECB模式:1、简单;2、有利于并行计算;3、误差不会bai被传送;
    
    CBC模式:1、不容易主动攻击,安全性好于baiECB,适合传输长度长的报文,是SSL、IPSec的标准。
    
    二、缺点不同:
    
    ECB模式:1、不能隐藏明文的模式;2、可能对明文进行主动攻击;
    
    CBC模式:1、不利于并行计算;2、误差传递;3、需要初始化向量IV
    
    三、概念不同
    
    1、ECB模式又称电子密码本模式:Electronic codebook,是最简单的块密码加密模式,
       加密前根据加密块大小(如AES为128位)分成若干块,
       之后将每块使用相同的密钥单独加密,解密同理。
    
    2、密码分组链接(CBC,Cipher-block chaining)模式,由IBM于1976年发明,
       每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,
       每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,
       在第一个块中需要使用初始化向量IV。

3.Base64 

1、在项目根目录下安装

    npm install --save js-base64

2、在项目文件中引入

    let base64 = require('js-base64').Base64

3、在项目文件中使用

    let q = base64.encode("1234567890ASDFGH");  
    let u = base64.decode(q);

4、加、解密实列:

    // Base64 加、解密
    let base64 = require('js-base64').Base64
    let q = base64.encode("1234567890ASDFGH");
    console.log("Base64-加密-密文:"+q);
    let u = base64.decode(q);
    console.log("Base64-解密-明文:"+u);

4.md5

1、在项目根目录下安装
    npm install --save js-md5
2、在main.js文件中,引入,并将md5挂在到vue原型上使其全局通用
    import md5 from 'js-md5'
    Vue.prototype.$md5 = md5
3、使用
    let pwd = '1qaz@WSX#EDC';//假设为密码
    let newpwd = this.$md5(pwd);//加密
    console.log(newpwd)//查看加密后的密码

5.RSA 加/解密

安装
    npm install jsencrypt --save-dev
    npm install encryptlong -S

1、依赖引入 [main.js]

    /* 引入jsencrypt实现数据RSA加密处理长文本数据时报错 jsencrypt.js Message too long for RSA */
    import JSEncrypt from 'jsencrypt';
    /* 引入encryptlong实现数据RSA加密encryptlong是基于jsenc        rypt扩展的长文本分段加解密功能。 */
    import Encrypt from 'encryptlong';
    
    Vue.prototype.$jsEncrypt = JSEncrypt

2、使用位置
let publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcBc+dUnGkfw6/DI46juK99HX6TzidbNnlqInhySf4jNz0HkaMGgO3l+/6IdGMH2X90px+qUhgQ8IF9a5B9mFM2jKMu6MBk9h0mQnUOnz4Iarh80r6Rnc33iK554Rjep0J7z/MBSWxnZY5PTh+xXE45XfBx7gK9XpZZUEd7R7fIwIDAQAB'
let privateKey = 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJwFz51ScaR/Dr8MjjqO4r30dfpPOJ1s2eWoieHJJ/iM3PQeRowaA7eX7/oh0YwfZf3SnH6pSGBDwgX1rkH2YUzaMoy7owGT2HSZCdQ6fPghquHzSvpGdzfeIrnnhGN6nQnvP8wFJbGdljk9OH7FcTjld8HHuAr1elllQR3tHt8jAgMBAAECgYA+a0i7LN+QKtDQeApyvPVTf3ivkoAY4xJtgbbf4KUgF+LRu0cIB+RSz/NPA7acs3cPS/IV7k2pTZJS5g44D4SvJXPIQiz89eukoH2O2blbK2J6wOCvQgqlT1ThDZjSRzmkzX21zy8wQZQp3igjUYYrSViTHtaY2RtzY75Ep3DosQJBAMpNYsONn9PGtT+e73rT1Zswq1F//DMV+sUrZKjMVKbf6KH0yHIYdULaID2LwF/uchDm5J34jVCxC/TP6rvXkOkCQQDFb6/4K0LtLrYt/uG/lx8Zx3lQ54f0Xt9TPD4wEIeqMbD/AD+unYDFvj3JOKzsJAKPmE8pmDQxUz4AJpmM6EgrAkEAxGv+yQBpfqYgtXUL8KZdcCEBNlCd/rwIkAhh48MBLkWZCicxuBYnRJGlXByk3IAYIHEO6JK8IuzEPx7hOyFCgQJBAJ9xA52ZajHagDsC09ICO5Z49Wq1n6BkIVu5kcsE/loeSP6Vd9gOz9hhOspOX69PoVXPPVas2LFgtPgwM96MEwMCQA0Iw2qOz11ta2cNhqb2EvX3xMuX19uZ26NmoSDhc0smXYXonEkq1nXOgr5k+p0G1Ud7tosFJmomc5cKWkpy8Pk='

    // 加签名
    let jse = new JSEncrypt();
    // 公钥加签名
    jse.setPublicKey(publicKey);
    let mima = jse.encrypt('正在加密')
    console.log('加密:'+mima)
    // 私钥签名
    jse.setPrivateKey(privateKey)
    console.log('解密:'+jse.decrypt(mima))

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值