安全架构-加密算法-AES加密Java实现

本文介绍了AES加密算法,其作为高级数据加密标准,因其安全性、效率和灵活性被选为新的数据加密标准。文章详细讲解了RINJDAEL算法的特性,包括数据块和密钥长度的可变性,并探讨了加密和解密过程,以及在Java中可能遇到的错误和解决方案,如非法块大小异常。同时,提到了加密内容必须是16的倍数的限制和如何避免此类问题。
摘要由CSDN通过智能技术生成

加密算法-AES加密Java实现

AES
  高级数据加密标准(Advanced Encryption Standard),简称AES,由美国政府于1997年开始公开征集的新的数据加密标准算法。经过三轮筛选,美国政府最终于2000年10月2日正式宣布选中密码学家Joan Daemen和Vincent Rijmen提出的RINJDAEL算法作为AES。

RINJDAEL算法之所以能够最终被选为AES的原因是其安全、性能好、效率高、实用、灵活。

RINJDAEL算法是一个数据块长度和密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位的任意倍数。而美国颁布AES时却规定数据块的长度为128位,密钥的长度可分别选择为128位、192位或256位。

RINJDAEL算法仍然采用分组密码的一种通用结构:对轮函数实施迭代的结构。只是轮函数结构采用的是代替/置换的网络结构(SP结构)。

加密:

        /**
         * 加密
         * 
         * @param content 需要加密的内容
         * @param password  加密密码
         * @return
         */
        public static byte[] encrypt(String content, String password) {
   
                try {
              
                        KeyGenerator kgen = KeyGenerator.getInstance("AES");
                        kgen.init(128, new SecureRandom(password.getBytes()));
                        SecretKey secretKey = kgen.generateKey();
                        byte[] enCodeFormat = secretKey.getEncoded();
                        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
                        Cipher cipher = Cipher.getInstance("AES");// 创建密码器
                        byte[] byteContent = content.getBytes("utf-8");
                        cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
                        byte[] result = cipher.doFinal(byteContent);
                        return result; // 加密
                } catch (NoSuchAlgorithmException e) {
   
                        e.printStackTrace();
                } catch (NoSuchPaddingException e) {
   
                        e.printStackTrace();
                } catch (InvalidKeyException e) {
   
                        e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
   
                        e.printStackTrace();
                } catch (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值