前端Ase加解密方法及应用

前端Ase加解密方法及应用

一、背景和意义

随着互联网的快速发展,数据安全问题日益受到关注。前端作为用户交互的主要界面,往往需要处理敏感数据,如用户个人信息、支付信息等。为了保护这些数据不被非法获取和篡改,前端加密技术应运而生。Aes(Advanced Encryption Standard)是一种广泛使用的对称加密算法,具有较高的安全性,适用于前端加密需求。

二、Aes加密算法简介

Aes是一种块加密算法,采用分组加密的方式对数据进行加密和解密。它将数据分成若干个固定长度的块,然后对每个块进行加密或解密。Aes算法具有较高的安全性,已被美国国家标准与技术研究院(NIST)定为美国的加密标准。

三、前端Aes加解密方法实现步骤及代码示例

1、引入Aes加解密库

在前端实现Aes加解密,需要引入专门的Aes加解密库。目前,有许多开源的Aes加解密库可供选择,如CryptoJS、Crypto-JS等。以CryptoJS为例,可以通过npm或yarn进行安装。

npm install crypto-js

2、准备密钥

在加密前,需要准备一个密钥。密钥可以是任意长度的字符串,但必须是16位、24位或32位的整数倍。在前端,可以使用随机数生成器生成一个随机密钥。

3、封装方法

const key = CryptoJS.enc.Utf8.parse("Sasdfasfasf"); // 作为密钥
const iv = CryptoJS.enc.Utf8.parse("asdfasfasdfasdf"); // 作为密钥偏移量
// aes加密
 export const aes_encrypt = word => {
  let srcs = CryptoJS.enc.Utf8.parse(word);
  let encrypted = CryptoJS.AES.encrypt(srcs, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
  return encrypted.ciphertext.toString().toUpperCase();
};
// aes解密
export const aes_decrypt = word => {
  let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
  let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
  let decrypt = CryptoJS.AES.decrypt(srcs, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
  let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  return decryptedStr.toString();
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Swift中提供了ASE加密解密的功能,可以使用CommonCrypto库来实现。下面是一个简单的示例代码: ```swift import CommonCrypto // 加密函数 func encryptAES(data: Data, key: Data, iv: Data) throws -> Data { let cryptLength = size_t(data.count + kCCBlockSizeAES128) var cryptData = Data(count: cryptLength) var numBytesEncrypted: size_t = 0 let cryptStatus = cryptData.withUnsafeMutableBytes { cryptBytes in data.withUnsafeBytes { dataBytes in key.withUnsafeBytes { keyBytes in iv.withUnsafeBytes { ivBytes in CCCrypt(CCOperation(kCCEncrypt), CCAlgorithm(kCCAlgorithmAES), CCOptions(kCCOptionPKCS7Padding), keyBytes, key.count, ivBytes, dataBytes, data.count, cryptBytes, cryptLength, &numBytesEncrypted) } } } } guard cryptStatus == kCCSuccess else { throw NSError(domain: "Encryption Error", code: Int(cryptStatus), userInfo: nil) } cryptData.removeSubrange(numBytesEncrypted..<cryptData.count) return cryptData } // 解密函数 func decryptAES(data: Data, key: Data, iv: Data) throws -> Data { let cryptLength = size_t(data.count + kCCBlockSizeAES128) var cryptData = Data(count: cryptLength) var numBytesDecrypted: size_t = 0 let cryptStatus = cryptData.withUnsafeMutableBytes { cryptBytes in data.withUnsafeBytes { dataBytes in key.withUnsafeBytes { keyBytes in iv.withUnsafeBytes { ivBytes in CCCrypt(CCOperation(kCCDecrypt), CCAlgorithm(kCCAlgorithmAES), CCOptions(kCCOptionPKCS7Padding), keyBytes, key.count, ivBytes, dataBytes, data.count, cryptBytes, cryptLength, &numBytesDecrypted) } } } } guard cryptStatus == kCCSuccess else { throw NSError(domain: "Decryption Error", code: Int(cryptStatus), userInfo: nil) } cryptData.removeSubrange(numBytesDecrypted..<cryptData.count) return cryptData } // 使用示例 let plaintext = "Hello, World!" let key = Data("01234567890123456789012345678901".utf8) let iv = Data("abcdefghijklmnop".utf8) let encryptedData = try encryptAES(data: Data(plaintext.utf8), key: key, iv: iv) print("Encrypted: \(encryptedData.base64EncodedString())") let decryptedData = try decryptAES(data: encryptedData, key: key, iv: iv) let decryptedText = String(data: decryptedData, encoding: .utf8) print("Decrypted: \(decryptedText ?? "")") ``` 上述代码中的`key`和`iv`需要根据实际情况来设置,其中`key`必须是16、24或32字节长度的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shero.李建业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值