Crypto加密解密

crypto 模块提供了加密功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。我们这里讲crypto AES算法加密

一、使用步骤

1.引入Crypto

    1.1   使用Crypto,有两种形式。一种是是在script便签直接引入,例如:

<script src="lib/CryptoJS v3.1.2/rollups/aes.js"></script>

   1.2  还有一种通过npm安装CryptoJS,例如:

npm install crypto-js

    1.2.1  如果是通过npm安装,需要引入,代码如下:

import CryptoJS from 'crypto-js/crypto-js'

2.开始编写逻辑代码

   安装完成后,你根据自己的需求对需要加密的数据进行加密。

二、如何加密

 第一种,先上代码:

    //aes加密
    encrypt (word) {
      const key = CryptoJS.enc.Utf8.parse("1234567890000000"); // 加密秘钥 16位
      const iv = CryptoJS.enc.Utf8.parse("1234567890000000");  // 加密矢量
      let encrypted = '';
      if (typeof(word) == 'string') {
        let srcs = CryptoJS.enc.Utf8.parse(word);
        encrypted = CryptoJS.AES.encrypt(srcs, key, {
          iv: iv,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7
        });
      } else if (typeof(word) == 'object') { //对象格式的转成json字符串
        data = JSON.stringify(word);
        let srcs = CryptoJS.enc.Utf8.parse(data);
        encrypted = CryptoJS.AES.encrypt(srcs, key, {
          iv: iv,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7
        })
      }
      return encrypted.ciphertext.toString();
    }
  },

代码讲解:

    这里的数据可以用两种数据格式,一种是字符串,一种是对象。然后我们对数据进行处理然后再根据自己定义的秘钥和矢量调用aes算法进行加密。

  第二种,先上代码:

encryption (data) {
    let strs=[];
    for(let i in data){
        strs.push(i+'='+data[i]);
    }
    strs.sort();  // 数组排序
    strs=strs.join('&'); // 数组变字符串
    let endData=strs+'&sign='+CryptoJS.MD5(strs+'ADfj3kcadc2349akvm1CPFFCD84f')
    .toString(); // MD5加密
    let key = CryptoJS.enc.Utf8.parse("0880076B18D7EE81"); // 加密秘钥
    let iv = CryptoJS.enc.Utf8.parse("CB3EC842D7C69578");  //  矢量
    let encryptResult = CryptoJS.AES.encrypt(endData,key, {   //  AES加密
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7  // 后台用的是pad.Pkcs5,前台对应为Pkcs7
    });
    return encodeURIComponent(CryptoJS.enc.Base64.stringify(encryptResult.ciphertext));  // Base64加密再 encode;
}

代码讲解:

    首先我们将数据进行排序,然后将排序好的数据进行MD5加密作为接口的签名,接着将排好序的数据和接口签名拼接上进行AES加密,倒数第二步,将AES加密后的密文进行base64加密,最后将最终的密文encodeURIComponent。

三、如何解密

   1.后台返回的数据也是密文

    2.后台返回的数据是json格式

代码如下:

decryption(data) {
    let key = CryptoJS.enc.Utf8.parse("0880076B18D7EE81");  // 加密秘钥
    let iv = CryptoJS.enc.Utf8.parse("CB3EC842D7C69578");   //  矢量
    let baseResult=CryptoJS.enc.Base64.parse(data);   // Base64解密
    let ciphertext=CryptoJS.enc.Base64.stringify(baseResult);     // Base64解密
    let decryptResult = CryptoJS.AES.decrypt(ciphertext,key, {    //  AES解密
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
  // 第一种 let resData
=decryptResult.toString(CryptoJS.enc.Utf8).toString(); return JSON.parse(resData);
// 第二种
  return CryptoJS.enc.Utf8.stringify(decryptResult) }

 

转载于:https://www.cnblogs.com/cczlovexw/p/9395172.html

Crypto API 是一个通用的加密API,可用于实现各种加密和解密算法。下面是一个使用 Crypto API 进行加密解密的示例: ```python import hashlib from Crypto.Cipher import AES # 对称加密算法 class SymmetricEncryption: def __init__(self, key): self.key = key # 加密函数 def encrypt(self, data): cipher = AES.new(self.key, AES.MODE_EAX) nonce = cipher.nonce ciphertext, tag = cipher.encrypt_and_digest(data.encode('utf-8')) return (nonce + ciphertext + tag) # 解密函数 def decrypt(self, data): nonce = data[:AES.block_size] tag = data[-16:] ciphertext = data[AES.block_size:-16] cipher = AES.new(self.key, AES.MODE_EAX, nonce=nonce) plaintext = cipher.decrypt(ciphertext) try: cipher.verify(tag) return plaintext.decode('utf-8') except: return None # 哈希算法 class HashAlgorithm: def __init__(self, algorithm): self.algorithm = algorithm # 计算哈希值 def hash(self, data): h = hashlib.new(self.algorithm) h.update(data.encode('utf-8')) return h.hexdigest() ``` 上面的代码定义了两个类:`SymmetricEncryption` 和 `HashAlgorithm`。 `SymmetricEncryption` 类使用 AES 对称加密算法进行加密和解密。 `HashAlgorithm` 类使用哈希算法计算哈希值。 使用示例: ```python # 对称加密示例 key = b'Sixteen byte key' encryptor = SymmetricEncryption(key) encrypted_data = encryptor.encrypt('hello world') print(encrypted_data) decrypted_data = encryptor.decrypt(encrypted_data) print(decrypted_data) # 哈希算法示例 hasher = HashAlgorithm('sha256') hashed_data = hasher.hash('hello world') print(hashed_data) ``` 在上面的示例中,我们使用了 AES 对称加密算法和 SHA256 哈希算法对数据进行了加密和哈希。在实际应用中,我们可以根据需要选择不同的加密和哈希算法来保护数据的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值