zoukankan      html  css  js  c++  java
  • 16: vue + crypto-js + python前后端加密解密

    1.1 vue中使用crypto-js进行AES加密解密

         参考博客:https://www.cnblogs.com/qixidi/p/10137935.html

      1、初始化vue项目

          vue init webpack itany

          cd itany

          cnpm install

          npm install crypto-js    # 安装rypto-js

      2、使用

    <template>
      <div id="app">
        <p @click="handleLogin">点击发送axiso请求</p>
    
    
      </div>
    </template>
    
    <script>
      import { mapActions } from 'vuex'
      import CryptoJS from "crypto-js";
      export default {
        name: 'App',
        methods: {
          handleLogin () {
    
            // 1、Encrypt 加密
            var cipherText = CryptoJS.AES.encrypt(
              "my message",
              "secretkey123"
            ).toString();
            console.log(cipherText)  // U2FsdGVkX1/Hjuv9Mt10c9Q/98PjhFSNXkmtz+sVaPU=
    
            // 2、Decrypt 解密
            var bytes = CryptoJS.AES.decrypt(cipherText, "secretkey123");
            var originalText = bytes.toString(CryptoJS.enc.Utf8);
            console.log(originalText, typeof originalText); // 'my message'
    
            // 3、解析json格式
            // var pjson =  JSON.parse(originalText)
          }
        },
      }
    </script>
    
    <style>
    
    </style>
    App.vue

          

    1.2 python中进行AES加密解密模块

      1、安装与使用

          pip uninstall crypto pycryptodome

          pip install pycryptodome
    # -*- coding:UTF-8 -*-
    from Crypto import Random
    from Crypto.Cipher import AES
    import base64
    from hashlib import md5
    
    
    class EncDecAES(object):
        def pad(self, data):
            length = 16 - (len(data) % 16)
            return data + (chr(length)*length).encode()
    
        def unpad(self, data):
            return data[:-(data[-1] if type(data[-1]) == int else ord(data[-1]))]
    
        def bytes_to_key(self, data, salt, output=48):
            assert len(salt) == 8, len(salt)
            data += salt
            key = md5(data).digest()
            final_key = key
            while len(final_key) < output:
                key = md5(key + data).digest()
                final_key += key
            return final_key[:output]
    
        def encrypt(self, message, passphrase):
            salt = Random.new().read(8)
            key_iv = self.bytes_to_key(passphrase, salt, 32 + 16)
            key = key_iv[:32]
            iv = key_iv[32:]
            aes = AES.new(key, AES.MODE_CBC, iv)
            return base64.b64encode(b"Salted__" + salt + aes.encrypt(self.pad(message)))
    
    
        def decrypt(self, encrypted, passphrase):
            encrypted = base64.b64decode(encrypted)
            assert encrypted[0:8] == b"Salted__"
            salt = encrypted[8:16]
            key_iv = self.bytes_to_key(passphrase, salt, 32 + 16)
            key = key_iv[:32]
            iv = key_iv[32:]
            aes = AES.new(key, AES.MODE_CBC, iv)
            return self.unpad(aes.decrypt(encrypted[16:]))
    
    
    
    if '__main__' == __name__:
        data = 'Data that needs to be encrypted!'    # 要加密的数据
        passphrase = 'secretkey123'                  # 加密解密用的秘钥
        
        #1、加密
        encMsg = EncDecAES().encrypt(data, passphrase)
        print encMsg   # U2FsdGVkX1/GaKnTiu4lQ6zuCwHB+SyN9ARgSZXLpJznjY38+cApNYL0qTdgQ3Iv
        
        #2、解密
        decMsg = EncDecAES().decrypt(encMsg, passphrase)
        print decMsg  # Data that needs to be encrypted
    crypto_aes.py
  • 相关阅读:
    如何通过代码设置WPF控件的字体,颜色
    WPF DataGrid 控件的运用
    WPF 动态创建 DataTemplate 及数据绑定
    WPF Grid 用 C# 代码后台设置
    C# a++ 与 ++a 的区别
    WPF 绑定以基础数据类型为集合的无字段名的数据源
    Visual Studio 快捷键
    WPF TabItem.Collapse 的问题
    C# XML 文件中的空格值问题
    C# XML文件操作
  • 原文地址:https://www.cnblogs.com/xiaonq/p/10773674.html
Copyright © 2011-2022 走看看