常用密码加密封装(Aes/md5/hex64)

Aes

import CryptoJS from 'crypto-js'
var AesUtil = {
   
    encrypt: function (word,key) {
   
        word = this.AES.Base64Encode(word);
        return this.AES.encrypt(word,key)
    },
    decrypt: function (word,key) {
   
        var base64Str = this.AES.decrypt(word, key);
        return this.AES.Base64Decode(base64Str);
    },

    AES: {
   
        Base64Encode: function (str) {
   
            var src = CryptoJS.enc.Utf8.parse(str);
            return CryptoJS.enc.Base64.stringify(src).toString();
        },
        Base64Decode: function (str) {
   
            return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(str));
        },
        /**
         * 加密
         * word:待加密明文
         * key :key
         * iv  : iv
         */
        encrypt: function (word,key,iv) {
   
            var srcs = CryptoJS.enc.Utf8.parse(word);
            if(key == undefined){
   
                key = "1234567890123456";
            }
            key = CryptoJS.enc.Utf8.parse(key); //十六位十六进制数作为秘钥
            if(iv == undefined){
   
                iv = "0123456789012345";
            }
            iv = CryptoJS.enc.Utf8.parse(iv);//十六位十六进制数作为秘钥偏移量
            var encrypted = CryptoJS.AES.encrypt(srcs, key, {
    mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7,iv:iv });
            return encrypted.ciphertext.toString();
        },
        /**
         * 解密
         * word:加密后的密码
         * key :key
         * iv  : iv
         */
        decrypt: function (word, key, iv) {
   
            word = CryptoJS.enc.Hex.parse(word);
            word = CryptoJS.enc.Base64.stringify(word);
            if (key == undefined) {
   
                key = "1234567890123456";
            }
            key = CryptoJS.enc.Utf8.parse(key); //十六位十六进制数作为秘钥
            if (iv == undefined) {
   
                iv = "0123456789012345";
            }
            iv = CryptoJS.enc.Utf8.parse(iv);//十六位十六进制数作为秘钥偏移量
            var decrypt = CryptoJS.AES.decrypt(word, key, {
    mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7,iv:iv });
            return this.Base64Decode(decrypt.toString(CryptoJS.enc.Base64));
        }
    }

};
export default AesUtil;

hex64

var _hexCHS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz$_~";
var Hex64 = function (key) {
   
  this._key = [],
    this._tbl = {
   };
  for (var _i = 0; _i < 64; ++_i) {
   
    this._key[_i] = _hexCHS.charAt(key[_i]);
    this._tbl[this._key[_i]] = _i
  }
  this._pad = _hexCHS.charAt(64)
};
Hex64.prototype.endWith = function (oldStr, findStr) {
   
  var reg = new RegExp(findStr + "$");
  return reg.test(oldStr);
};
Hex64.prototype.enc = function (s) {
   
  var _rs = "";
  var _c1, _c2, _c3, _n1, _n2, _n3, _n4;
  var _i = 0;
  var _a = Hex64._2to1(s);
  var _en = _a.length % 3,
    _sz = _a.length - _en;
  while (_i < _sz) {
   
    _c1 = _a[_i++];
    _c2 = _a[_i++];
    _c3 = _a[_i++];
    _n1 = _c1 >> 2;
    _n2 = ((_c1 & 3) << 4) | (_c2 >> 4);
    _n3 = ((_c2 & 15) << 2) | (_c3 >> 6);
    _n4 = _c3 & 63;
    _rs += this._key[_n1] + this._key[_n2] + this._key[_n3] + this._key[_n4]
  }
  if (_en > 0) {
   
    _c1 = _a[_i++];
    _c2 = _en > 1 ? _a[_i] : 0;
    _n1 = _c1 >> 2;
    _n2 = (</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Java实现AES/ECB/PKCS5Padding加密和解密的示例代码: ``` import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; public class AESUtil { private static final String ALGORITHM = "AES"; private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding"; // 加密 public static String encrypt(String data, String key) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM); Cipher cipher = Cipher.getInstance(TRANSFORMATION); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encrypted = cipher.doFinal(data.getBytes()); return Base64.getEncoder().encodeToString(encrypted); } // 解密 public static String decrypt(String encryptedData, String key) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM); Cipher cipher = Cipher.getInstance(TRANSFORMATION); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encryptedData)); return new String(decrypted); } } ``` 使用示例: ``` public static void main(String[] args) throws Exception { String data = "Hello, world!"; String key = "0123456789abcdef"; String encryptedData = AESUtil.encrypt(data, key); String decryptedData = AESUtil.decrypt(encryptedData, key); System.out.println("加密前:" + data); System.out.println("加密后:" + encryptedData); System.out.println("解密后:" + decryptedData); } ``` 输出: ``` 加密前:Hello, world! 加密后:qVeqhVSSSmYZQgz6H+JYUA== 解密后:Hello, world! ``` 注意事项: 1. key 长度必须为16位。 2. 为了方便起见,这里使用了 Base64 编码。如果需要更高的安全性,可以使用 Hex 编码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值