收藏
评论

小程序中如何使用Crypto进行加解密

该插件完全前端化,无任何服务器端调用,请放心使用。如果不放心可用fiddler截取插件包查看相关源码。


  1. 登录微信公众平台 https://mp.weixin.qq.com,输入小程序账号密码。



  2. 点击设置,打开第三方服务,点击添加插件。


  3. 搜索 Crypto 或者 wxf25d506ff81e19fb




  4. 搜索结果出来后选中 Crypto ,点击添加。



  5. 配置小程序app.json

  6. 加入

    "plugins":{

        "crypto":{

            "version":"0.0.003",

            "provider":"wxf25d506ff81e19fb"

        }

    }

    注: version填0.0.002也可使用,0.0.002没有 PBKDF2 加密方式及 RSA 非对称加解密方式


  7. 在小程序代码中声明引用       

    const crypto = requirePlugin("crypto");


  8. 使用MD5加密

  9. new crypto["MD5"]("布包云").toString();


  10. 使用AES 进行加解密

  11. const mi = new crypto.AES().encrypt('布包云'"BubaoCloud", {

    iv: 8,

    mode: crypto.Mode.CBC,

    padding: crypto.Padding.Pkcs7

    });

    console.log('encrypt:', mi.toString());


    const v = new crypto.AES().decrypt(mi.toString(), "BubaoCloud", {

    iv: 8,

    mode: crypto.Mode.CBC,

    padding: crypto.Padding.Pkcs7

    });

    console.log('decrypt:', v.toString(crypto.Utf8));


最后一次编辑于  2018-11-07
收藏

22 个评论

  • kk
    kk
    2019-08-29

    iv:8是什么意思

    2019-08-29
    赞同
    回复
  • 斯杰
    斯杰
    2019-07-25

    我使用AES解密


    执行到最后   v.toString(crypto.Utf8)  的时候报这个错



    断点调试看了下,是decodeURIComponent(escape(a.stringify(t))这里,解析出的字符串含%,


    导致decodeURIComponent报错了


    我的参数是


    s是session_key


    代码如第一张图,想求教下是不是哪里写的不对

    2019-07-25
    赞同
    回复
  • alin
    alin
    2019-05-05

    [non-writable] modification of global variable "Page" is not allowed when using plugins at app.json. 求解答

    2019-05-05
    赞同
    回复
  • sdy
    sdy
    2019-04-03

    楼主,这个东西加密的密文有两种,一种是密文每次都一样,一种是密文每次不一样,一样的密文用的 base64,不一样的密文用的是啥?

    2019-04-03
    赞同
    回复
  • 2019-04-02

    楼主你好,为啥用插件生成的秘钥,跟后台还有在线测试工具的不能通用呢?

    2019-04-02
    赞同
    回复 1
    • 2019-04-02

      RSA的

      2019-04-02
      回复
  • 来者可追
    来者可追
    2019-01-21

    aes可以设置128位和256位吗

    2019-01-21
    赞同
    回复
  • JaneTan
    JaneTan
    2018-12-26

    这个可以解密小程序的getUserInfo那个返回的个人信息吗

    2018-12-26
    赞同
    回复 1
    • One




.
      One .
      2018-12-27

      不推荐那样做。

      2018-12-27
      回复
  • 2018-12-26

    如果有 rsa加密,麻烦给介绍一下。。

    2018-12-26
    赞同
    回复 3
    • One




.
      One .
      2018-12-27
        console.warn('----------------------------------------------RSA Key')
          const keypair = new crypto.Keypair({bits:512});
          console.log('RSA key', keypair);
      
          console.warn('----------------------------------------------value: 布包云 key: RSA KEY')
          const encrypt = new crypto.RSA();
          encrypt.setPublicKey(keypair.public);
          const encrypted = encrypt.encrypt('布包云');
          console.log('RSA encrypt', encrypted);
      
      
          const decrypt = new crypto.RSA();
          decrypt.setPrivateKey(keypair.private);
          const decrypted = decrypt.decrypt(encrypted);
          console.log('RSA decrypt', decrypted);
      版本填:0.0.003
      https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wxf25d506ff81e19fb&token=&lang=zh_CN
      2018-12-27
      回复
    • 2018-12-27回复One .

       我这边只是想将登陆密码加密,没有用到wx.login。这个牵扯后台解密。。还能用这种方法吗??

      2018-12-27
      回复
    • One




.
      One .
      2019-01-02回复

      可以的

      2019-01-02
      回复
  • MT
    MT
    2018-12-03

    已加入插件,文档也看了,还是一头雾水。

    从微信拿到的数据有三个,

    先是从开发者服务端拿到 sessionKey,然后从微信端拿到  iv 和 encryptedData


    这三个数据都是base64加密数据,官主是这么说的:


    1. 对称解密的目标密文为 Base64_Decode(encryptedData)。

    2. 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。

    3. 对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。

    在楼主的这个插件里。要怎么处理才能拿到encryptedData的解密数据呢,另外 两个 key与iv是辅助解密用的,但在你给的例子里。AES解密 时只用到了 明文的 IV,key怎么没有使用。

    2018-12-03
    赞同
    回复 3
    • One




.
      One .
      2018-12-04

        const mi = new crypto.AES().encrypt('布包云'"BubaoCloud", {

        iv: 8,

        mode: crypto.Mode.CBC,

        padding: crypto.Padding.Pkcs7

        });

        console.log('encrypt:', mi.toString());


        const v = new crypto.AES().decrypt(mi.toString(), "BubaoCloud", {

        iv: 8,

        mode: crypto.Mode.CBC,

        padding: crypto.Padding.Pkcs7

        });

        console.log('decrypt:', v.toString(crypto.Utf8));



      1. BubaoCloud 是key

      2. 插件里面自带Base64,你可以这样使用

      3.         const enCodeBase64 = crypto.Base64.stringify(crypto.Utf8.parse('bubao'));

                console.log(enCodeBase64)

                const deCodeBase64 = crypto.Utf8.stringify(crypto.Base64.parse(enCodeBase64))

                console.log(deCodeBase64)

      4. 不知道插件里有啥可以直接console.log(crypto)

      5. 不知道怎么用可以在搜索引擎里搜索cryptojs aes加密



      2018-12-04
      1
      回复
    • MT
      MT
      2018-12-04回复One .

      谢谢,我再试试

      2018-12-04
      回复
    • One




.
      One .
      2018-12-04回复MT

      友情提醒一下,你需要的这些数据都是在服务器端处理的。

      2018-12-04
      回复
  • hello world
    hello world
    2018-11-05

    请问答主还需要你通过申请吗?是不是直接添加后不可以马上使用

    2018-11-05
    赞同
    回复 10
    • One




.
      One .
      2018-11-06

      添加后就可以使用

      2018-11-06
      回复
    • hello world
      hello world
      2018-11-06回复One .

      你好,请问你的版本号是多少,我根据插件设置里面的开发文档看到的是3.1.2,然而使用时提示插件版本不存在哎,求指教

      2018-11-06
      回复
    • One




.
      One .
      2018-11-06回复hello world

      0.0.003

      0.0.002

      都可用

      2018-11-06
      回复
    • hello world
      hello world
      2018-11-06回复One .

      好的,谢谢你呀

      2018-11-06
      回复
    • One




.
      One .
      2018-11-06回复hello world

      没事没事

      2018-11-06
      回复
    查看更多(5)

正在加载...

登录 后发表内容