AES128数据加密

AES128加密是最常见的一种数据加密方式,可以自己设置key值,下面就贴一个简单的数据加密方法,很简单直接调用就行:

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Hex;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

/**
 * AES128加解密
 */
@Slf4j
public class AESUtil {

    /**
     * AES-128数据加密
     */
    public static String Encrypt(String src, String key) {
        try{
            log.info("start encrypt data!");
            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(),"AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
            cipher.init(Cipher.ENCRYPT_MODE,skeySpec);
            byte[] encrypted = cipher.doFinal(src.getBytes());
            return new String(Hex.encodeHex(encrypted)).toUpperCase();
        }catch (Exception e) {
            log.error("encrypt data failed",e);
            return null;
        }
    }

    /**
     * AES-128数据解密
     */
    public static String Decrypt(String src, String key){
        try{
            log.info("start decrypt data!");
            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(),"AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
            cipher.init(Cipher.DECRYPT_MODE,skeySpec);
            byte[] dncrypted = cipher.doFinal(Hex.decodeHex(src.toCharArray()));
            return new String(dncrypted);
        }catch (Exception e){
            log.error("decrypt data failed",e);
            return null;
        }
    }

    /**
     * test
     */
    public void test() {
        String key = "abcdefg";
        String data = "0123456789";

        String jiamihou = AESUtil.Encrypt(data,key);
        log.info("加密后数据是:",jiamihou);

        String jiemihou = AESUtil.Decrypt(data,key);
        log.info("解密后数据是:",jiemihou);
    }
}

 

04-02
### AES-128 加密算法的细节与应用 #### 什么是AES-128? 高级加密标准(Advanced Encryption Standard, AES)是一种对称分组密码,广泛用于保护电子数据的安全传输。AES支持三种不同的密钥长度:128位、192位和256位,分别对应于AES-128AES-192和AES-256。其中,AES-128因其较高的安全性和较低的计算复杂度而被广泛应用。 AES-128采用了一种称为Rijndael的算法,该算法由Joan Daemen和Vincent Rijmen设计,并成为美国国家标准技术研究所(NIST)推荐的标准[^1]。 #### 密码学特性 AES-128的核心在于其基于替换-置换网络的操作模式。它通过一系列轮次变换来实现加密过程,每一轮都涉及字节替代、行移位、列混淆以及密钥加法操作。具体来说: - **字节替代(SubBytes)**:每个字节都被一个固定的S盒中的值所取代。 - **行移位(ShiftRows)**:矩阵中的每一行都会向左循环移动一定数量的位置。 - **列混淆(MixColumns)**:除了最后一轮外,在这一阶段会对状态矩阵执行线性转换运算。 - **密钥加法(AddRoundKey)**:当前的状态会与扩展后的子密钥进行异或操作。 这些步骤共同构成了AES的强大安全性基础。 #### 使用场景 由于其实现简单且性能优越,AES-128常应用于文件加密、通信协议中的数据保护以及其他需要高强度保密性的场合。例如,在Python中可以利用PyCrypto库轻松完成基于AES算法的文件加密解密功能开发。 以下是使用PyCrypto实现基本AES加密的一个例子: ```python from Crypto.Cipher import AES import os def pad(s): return s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size) key = b'Sixteen byte key' plaintext = 'Secret Message A' cipher = AES.new(key, AES.MODE_ECB) padded_plaintext = pad(plaintext).encode('utf-8') ciphertext = cipher.encrypt(padded_plaintext) print(ciphertext.hex()) ``` 此脚本展示了如何创建一个简单的AES ECB模式下的加密器实例,并对其进行测试运行。 #### 安全考量 尽管AES-128提供了强大的安全保障,但在实际部署过程中仍需注意一些潜在风险因素。比如避免重复使用相同的初始化向量(IV),因为这可能导致模式泄露攻击;另外也要妥善保管好私有秘钥以防丢失或者被盗取等问题发生。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值