网上资料显示,下一代加密技术会围绕着AES技术进行。初出茅庐,学习编写了加密代码,如下所示

package com.bao.tools.encryption;

import java.security.SecureRandom;
import java.util.Scanner;

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

import org.junit.Test;

/**
 * @title AES加密解密算法
 * @description 高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,现在 AES 标准的一个实现是 Rijndael 算法
 * @author Administrator
 * @date 2015-7-16
 */
public class CAES {
    
    /**
     *
     * @param key(生成键字符串)
     * @param value(加密的文字字符串)
     * @param mode
     *            (true:加密;false:解密)
     * @return
     */
    public static byte[] setEncrypted(String key, byte[] value, boolean mode)throws Exception {
        if (key == null || value == null)
            return null;
        // --------- 生成密码键
        // 创建AES通用键模式
        KeyGenerator generator = KeyGenerator.getInstance("AES");
        // 初始化通用键(256位,创建随机编码键)
        generator.init(128, new SecureRandom(key.getBytes("UTF-8")));
        // 创建安全键实例
        SecretKey keys = generator.generateKey();
        // 创建密匙规范的实例
        SecretKeySpec keySpec = new SecretKeySpec(keys.getEncoded(), "AES");

// ----------开始加密/解密内容
        Cipher cipher = Cipher.getInstance("AES");// 创建AES内容加密实例
        if (mode) {
            cipher.init(Cipher.ENCRYPT_MODE, keySpec);// 加密
        } else {
            cipher.init(Cipher.DECRYPT_MODE, keySpec);// 解密
        }
        byte[] result = cipher.doFinal(value);
        return result;//注意:返回一定是byte数组,否则报 16位字节异常 !
    }

/*
     * 测试
     */
    @Test
    public void test() throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("-----------AES安全加密测试-------------\n请输入主键(字符串):");
        String key = scanner.nextLine();
        System.out.println("请输入要加密的内容:");
        String value=scanner.nextLine();
        System.out.println("---------运行结果-----------");
        
        //如果要求安全系数更高且暂时不用解密,可以使用BASE64编码后再进行AES加密
//        value = CBase64.setEncrypted(value);
        
        byte[] message = setEncrypted(key, value.getBytes(), true);//执行加密方法
        System.out.println("------加密字符为:"+new String(message));//在这里将字节数组转换为字符串显示出来
                
        System.out.println("+++++++解 密 :"+new String(setEncrypted(key, message, false)));
        
        scanner.close();
    }
}
运行结果:

注明:网上找的资料,搞了大半个晚上才发现,byte存取很重要,不然会报16倍数字节异常 !

AES加密算法-128位高安全,高速度的更多相关文章

  1. C# AES的128位、192位、256位加密

    C# AES的128位.192位.256位加密   AES加密原理,这里就不解释了,自行百度.这里主要细说AES的CBC加密模式下的128位.192位.256位加密区别,参考 对称加密和分组加密中的四 ...

  2. python3.7 AES.MODE_ECB(128位) pkcs5padding 加密算法

    用惯用的写法总报TypeEerror错误,经过调试,总算成功啦,直接上代码 TypeError("Object type %s cannot be passed to C code" ...

  3. C# 128位AES 加密解密 (转)

    /// AES加密 2         /// </summary> 3         /// <param name="inputdata">输入的数据 ...

  4. .NET AES加解密(128位)

    AES加密(128位): /// <summary> /// 有密码的AES加密 /// </summary> internal static string Encrypt(s ...

  5. php AES cbc模式 pkcs7 128位加密解密(微信小程序)

    PHP AES CBC模式PKCS7 128位加密 加密: $key = '1234567812345678'; $iv = '1234567890123456'; $message = '12345 ...

  6. Microsoft(C)注册服务器(32位)CPU占用高

    Microsoft(C)注册服务器(32位)CPU占用高 摘自:https://blog.csdn.net/jtsqrj/article/details/83034252 2018年10月12日 23 ...

  7. 参考别人的代码写的aes加密,记录一下(AES,ECB模式,填充PKCS5Padding,数据块128位,偏移量无,以hex16进制输出)

    package org.jimmy.autosearch2019.test; import java.security.SecureRandom; import javax.crypto.Cipher ...

  8. SGC强制最低128位加密,公钥支持ECC加密算法的SSL证书

      Pro SSL证书,验证企业域名所有权和企业身份信息,采用SGC(服务器门控)技术强制128位以上至256位加密,属于企业OV验证级专业版(Pro) SSL证书:即使用户使用低版本浏览器(比如浏览 ...

  9. AES 加密算法的原理详解

    AES 加密算法的原理详解 本教程摘选自 https://blog.csdn.net/qq_28205153/article/details/55798628 的原理部分. AES简介 高级加密标准( ...

随机推荐

  1. linux下串口控制

    /*  本程序符合GPL条约  *  Beneboy 2003-5-16 */ #include <stdio.h>              // printf #include < ...

  2. selenium定位失败记录

    selenium webdriver定位不到元素的五种原因及解决办法 1.动态id定位不到元素 for example: //WebElement xiexin_element = driver.fi ...

  3. 匹配表单中所有的子级input元素。

    HTML 代码: <form> <label>Name:</label> <input name="name" /> <fie ...

  4. CentOS修改主机名和网络信息

    1.修改主机名称 [root@centos ~]# vim /etc/sysconfig/network打开文件,修改以下内容并保存 NETWORKING=yes #使用网络 HOSTNAME=cen ...

  5. Oracle主库归档丢失,备库日志有gap,在不重建备库的情况下,恢复备库

    本文主要描述Oracle备库日志与主库日志之间有gap,切主库这部分gap的归档日志已经删除或丢失,如何在不重建备库的情况下,恢复备库. 欢迎转载,请注明作者.出处. 作者:张正 blog:http: ...

  6. 【PHP操作sphinx】

    [index.php] [find.php] <?php header("Content-type:text/html;charset=utf-8"); $keyword = ...

  7. 【PHP设计模式 03_JianDanGongChang.php】 简单工厂

    <?php /** * [简单工厂] * 之前 02.php 面向接口开发,客户端还是知道了服务器端的所有类. * 现在想让客户端只知道一个类,就用工厂. */ header("Con ...

  8. svn down代码的时候提示“由于目标计算机积极拒绝,无法连接”

    如上图所示: 原因1:svn没有启动成功 原因2:防火墙没有svn的端口号3690 解决方法: 1.启动svn服务 svnserve -d -r svn路径   例如:svnserve -d -r / ...

  9. nginx完美支持tp框架

    nginx完美支持tp框架 server { listen 80; server_name mit.520m.com.cn; access_log /data/wwwlogs/mit.520m.com ...

  10. symfony中twig的模板变量与注释

    程序会传递给模板若干变量,你需要在模板里输出他们.例如输出$hello .1{{ hello }}.如果传递给模板的是对象或者数组,你可以使用点. 来输出对象的属性或者方法,或者数组的成员.或者你可以 ...