加密解密AES(证件号、手机号)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 加密解密AES(证件号、手机号)

AES

AES(Advanced Encryption Standard)是一种对称加密算法,用于保护敏感数据的机密性。它是目前最常用的加密算法之一,被广泛应用于各种领域,包括网络通信、数据存储和传输等。

特点:

  1. 安全性高:AES采用了高级的加密技术,具有较高的安全性,被广泛认可为安全可靠的加密算法。
  2. 高效性:AES算法的加密和解密速度快,适用于大规模数据的加密和解密操作。
  3. 灵活性:AES算法支持多种密钥长度,包括128位、192位和256位,可以根据需求选择合适的密钥长度。

算法原理:

AES算法基于分组密码的思想,将明文数据分成固定长度的数据块(128位),然后对每个数据块进行加密和解密操作。AES算法使用了一系列的轮函数,包括字节替代、行移位、列混淆和轮密钥加等步骤,通过多轮迭代来完成加密和解密过程。

应用场景:

  1. 网络通信:AES算法可以用于保护网络通信中的数据传输安全,例如加密敏感信息的传输,防止数据被窃取或篡改。
  2. 数据存储:AES算法可以用于加密存储在本地设备或云端的敏感数据,确保数据在存储过程中的安全性。
  3. 身份验证:AES算法可以用于加密用户的身份信息,确保用户身份的安全性和隐私性。
  4. 加密文件:AES算法可以用于加密文件,保护文件的机密性,防止未经授权的访问。

算法举例

第一种:指定的规则

package com.yun.greedy.testJava.AES;
 
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
 
public class AESUtils {
    private static final String ENCODE_CHARSET = "UTF-8";
    private static final String ENCODE_ALGORITHM = "AES";
    private static final String ENCODE_TRANSFORMATION = "AES/ECB/PKCS5Padding";
 
    public AESUtils() {
    }
 
    /**
     * 过时 不推荐
     */
    @Deprecated
    public static String AESEncodeWithHex(String rule, String content) throws Exception {
        byte[] result = cipher(buildSecretKey(rule), content.getBytes(ENCODE_CHARSET), 1);
        return bytes2Hex(result);
    }
 
    /**
     * 过时 不推荐
     */
    @Deprecated
    public static String AESDecodeWithHex(String rule, String content) throws Exception {
        byte[] result = cipher(buildSecretKey(rule), hex2Bytes(content), 2);
        return new String(result, ENCODE_CHARSET);
    }
 
    /**
     * 解密
     *
     * @param rule    加密规则  必须为16, 24, 32位字符
     * @param content 加密字段
     * @return
     * @throws Exception
     */
    public static String AESEncode(String rule, String content) throws Exception {
        byte[] result = cipher(buildSecretKey(rule), content.getBytes(ENCODE_CHARSET), 1);
        return Base64.getEncoder().encodeToString(result);
    }
 
    /**
     * 加密
     *
     * @param rule    加密规则  必须为16, 24, 32位字符
     * @param content 密文(加密后的字段)
     * @return
     * @throws Exception
     */
    public static String AESDecode(String rule, String content) throws Exception {
        byte[] contentBytes = Base64.getDecoder().decode(content);
        byte[] result = cipher(buildSecretKey(rule), contentBytes, 2);
        return new String(result, ENCODE_CHARSET);
    }
 
    /**
     * 过时 不推荐
     */
    @Deprecated
    private static String bytes2Hex(byte[] bytes) {
        StringBuffer sb = new StringBuffer(bytes.length);
        byte[] var3 = bytes;
        int var4 = bytes.length;
 
        for (int var5 = 0; var5 < var4; ++var5) {
            byte b = var3[var5];
            String hex = Integer.toHexString(255 & b);
            if (hex.length() < 2) {
                sb.append(0);
            }
 
            sb.append(hex.toUpperCase());
        }
 
        return sb.toString();
    }
 
    /**
     * 过时 不推荐
     */
    @Deprecated
    private static byte[] hex2Bytes(String hex) {
        String str = "0123456789ABCDEF";
        char[] hexs = hex.toCharArray();
        byte[] bytes = new byte[hex.length() / 2];
 
        for (int i = 0; i < bytes.length; ++i) {
            int n = str.indexOf(hexs[2 * i]) * 16;
            n += str.indexOf(hexs[2 * i + 1]);
            bytes[i] = (byte) (n & 255);
        }
 
        return bytes;
    }
 
    private static SecretKeySpec buildSecretKey(String rule) throws UnsupportedEncodingException {
        return new SecretKeySpec(rule.getBytes(ENCODE_CHARSET), ENCODE_ALGORITHM);
    }
 
    public static byte[] cipher(SecretKeySpec secretKey, byte[] input, int mode) throws Exception {
        Cipher cipher = Cipher.getInstance(ENCODE_TRANSFORMATION);
        cipher.init(mode, secretKey);
        return cipher.doFinal(input);
    }
}

验证测试

package com.yun.greedy.testJava.AES;
 
public class AESTest {
    public static void main(String[] args) {
        String content = "加密字段";//原文
        String rule = "ASD3243ghuy56456@*!&D242";//加密规则必须为16, 24, 32位字符
        System.out.println("加密规则长度:" + rule.length());
        try {
            String encode = AESUtils.AESEncode(rule, content);
            System.out.println("加密:" + encode);
            String decode = AESUtils.AESDecode(rule, encode);
            System.out.println("原文:" + content);
            System.out.println("解密:" + decode);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

第二种:随机生成的规则

 
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Base64;
 
public class AESExample {
    /**
     * 选择AES算法和加密模式(例如,CBC模式)
     */
    public static final String AES_CBC = "AES/CBC/PKCS5Padding";
    /**
     * 创建密钥规范
     */
    public static final String AES_KEY = "AES";
 
    public static void main(String[] args) throws Exception {
        // 生成随机的128位密钥
        byte[] key = getRule(16);
        // 要加密的明文数据
        String plaintext = "Hello, World!";
        // 加密数据
        String encrypt = encrypt(plaintext, key);
        // 解密数据
        String decryptedPlaintext = decrypt(encrypt, key);
        System.out.println("明文数据: " + plaintext);
        System.out.println("加密后的数据: " + encrypt);
        System.out.println("解密后的数据: " + decryptedPlaintext);
    }
 
    /**
     * 获取规则key(随机生成的规则)
     *
     * @param i 秘钥16, 24, 32位数
     * @return
     */
    public static byte[] getRule(int i) throws Exception {
        if (i != 16 && i != 24 && i != 32) {
            throw new Exception("规则位数必须是16或24或32位数!");
        }
        StringBuffer sb = new StringBuffer();
        // 生成随机的密钥
        byte[] key = new byte[i];
        SecureRandom secureRandom = new SecureRandom();
        secureRandom.nextBytes(key);
        for (int in : key) {
            sb.append(in).append(",");
        }
        String substring = sb.substring(0, sb.length() - 1);
        System.out.println("秘钥:" + substring);
        return key;
    }
 
    /**
     * 创建密钥规范
     *
     * @param key 秘钥
     * @return
     */
    public static SecretKeySpec secretKeySpec(byte[] key) {
        return new SecretKeySpec(key, AES_KEY);
    }
 
    /**
     * 选择AES算法和加密模式
     *
     * @param key 秘钥
     * @param i   加密1 解密2
     * @return
     * @throws Exception
     */
    public static Cipher cipher(byte[] key, int i) throws Exception {
        SecretKeySpec secretKeySpec = secretKeySpec(key);
        // 创建初始化向量
        IvParameterSpec ivParameterSpec = new IvParameterSpec(key);
        // 选择AES算法和加密模式(例如,CBC模式)
        Cipher cipher = Cipher.getInstance(AES_CBC);
        // 初始化加密器
        cipher.init(i, secretKeySpec, ivParameterSpec);//加密
        return cipher;
    }
 
    /**
     * 加密
     *
     * @param plaintext 加密明文
     * @param key       秘钥
     * @return
     * @throws Exception
     */
    public static String encrypt(String plaintext, byte[] key) throws Exception {
        // 选择AES算法和加密模式(例如,CBC模式)
        Cipher cipher = cipher(key, Cipher.ENCRYPT_MODE);
        // 加密数据
        byte[] bytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
        String encode = Base64.getEncoder().encodeToString(bytes);
        return encode;
    }
 
    /**
     * 解密
     *
     * @param encrypt 加密的数据
     * @param key     秘钥
     * @return
     * @throws Exception
     */
    public static String decrypt(String encrypt, byte[] key) throws Exception {
        byte[] decode = Base64.getDecoder().decode(encrypt);
        // 选择AES算法和加密模式(例如,CBC模式)
        Cipher cipher = cipher(key, Cipher.DECRYPT_MODE);
        // 解密数据
        byte[] plaintextBytes = cipher.doFinal(decode);
        String plaintext = new String(plaintextBytes, StandardCharsets.UTF_8);
        return plaintext;
    }
}


相关文章
|
2月前
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
217 43
|
2月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
|
3月前
|
存储 安全 数据安全/隐私保护
解锁Python安全新姿势!AES加密:让你的数据穿上防弹衣,无惧黑客窥探?
【8月更文挑战第1天】在数字化时代,确保数据安全至关重要。AES(高级加密标准)作为一种强大的对称密钥加密算法,能有效保护数据免遭非法获取。AES支持128/192/256位密钥,通过多轮复杂的加密过程提高安全性。在Python中,利用`pycryptodome`库可轻松实现AES加密:生成密钥、定义IV,使用CBC模式进行加密与解密。需要注意的是,要妥善管理密钥并确保每次加密使用不同的IV。掌握AES加密技术,为数据安全提供坚实保障。
176 2
|
2月前
|
数据安全/隐私保护
aes之ecb模式的加密解密
aes之ecb模式的加密解密
|
2月前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
127 8
|
1月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
67 0
|
2月前
|
安全 算法 数据安全/隐私保护
深度揭秘!Python加密技术的背后,AES与RSA如何守护你的数据安全
【9月更文挑战第10天】随着数字化时代的到来,数据安全成为企业和个人面临的重大挑战。Python 作为功能强大的编程语言,在数据加密领域扮演着重要角色。AES 和 RSA 是两种主流加密算法,分别以对称和非对称加密方式保障数据安全。AES(Advanced Encryption Standard)因其高效性和安全性,在数据加密中广泛应用;而 RSA 则利用公钥和私钥机制,在密钥交换和数字签名方面表现卓越。
80 3
|
2月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
60 1
|
2月前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
46 2
|
3月前
|
JavaScript 数据安全/隐私保护 Python
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
147 4
下一篇
无影云桌面