AES加解密,JAVA密码器的使用

原创 2018年04月16日 23:10:15

AES加解密,JAVA密码器的使用

分组密码简介

分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。
主要分组密码有:DES,AES,这些密码在JAVA中的使用,皆可以通过java自带的密码器来实现。

AES简介

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

加密器语句

1.创建密码器
Cipher cipher = Cipher.getInstance();
// 创建密码器
其中,括号中可以填写加密的”算法/模式/补码方式”

Cipher cipher = Cipher.getInstance(“AES/ECB/PKCS5Padding”);//”算法/模式/补码方式”
就是AES加密,工作模式是ECB
当然也可以简写为:
Cipher cipher = Cipher.getInstance(“AES”);
这只是创建一个AES加密器,其他方式皆为默认值。
2.初始化
cipher.init(Cipher.ENCRYPT_MODE, key);
其中,key为要使用的密钥。
这个密钥可以用密钥生成语句来规范SecretKey,这个我们会单独写一个章节。
3.加密
byte[] encrypted = cipher.doFinal(sSrc.getBytes(“utf-8”));
sSrc为加密内容,后面的语句表示把其转成utf-8来进行加密,加解密的转换用的规则必须一致。

这样我们新建的字节数组 encrypted就是我们获得的加密后的密文字节。

具体程序案列

import java.security.*;  
import javax.crypto.*;  
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;

public class AES2 {  
    public AES2() {
    }
    //测试

    public static void main(String args[]) {
    String content = "testtest123456";  
    String password = "12345678";  
    //加密  
    System.out.println("加密前:" + content);  
    byte[] encryptResult = encrypt(content, password);  
    //解密  
    byte[] decryptResult = decrypt(encryptResult,password);  
    System.out.println("解密后:" + new String(decryptResult));  
    } 


/** 
 * 加密 
 *  
 * @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 (IllegalBlockSizeException e) {  
                e.printStackTrace();  
        } catch (BadPaddingException e) {  
                e.printStackTrace();  
        }  
        return null;  
}  
/**解密 
 * @param content  待解密内容 
 * @param password 解密密钥 
 * @return 
 */  
public static byte[] decrypt(byte[] 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");// 创建密码器  
                cipher.init(Cipher.DECRYPT_MODE, key);// 初始化  
                byte[] result = cipher.doFinal(content);  
                return result; // 加密  
        } catch (NoSuchAlgorithmException e) {  
                e.printStackTrace();  
        } catch (NoSuchPaddingException e) {  
                e.printStackTrace();  
        } catch (InvalidKeyException e) {  
                e.printStackTrace();  
        } catch (IllegalBlockSizeException e) {  
                e.printStackTrace();  
        } catch (BadPaddingException e) {  
                e.printStackTrace();  
        }  
        return null;  
}  
/** 
 * 异或运算 

 */  
public static byte[] xor(byte[] content, byte[] key){
    byte[] result=new byte[64];
    for(int i=0;i<64;i++){
        result[i]=(byte)(content[i]^key[i]);
    }
        return result;
}
}

结果图

这里写图片描述

推技术聊天室的实现(2)

发信人: luckyboy (海阔天空~将上网进行到底), 信区: Network  下面我们来看看具体实现流程:聊天服务器的实现  我们的服务器的核心部分是ThreadedChatHandle类,我...
  • wxyxl
  • wxyxl
  • 2001-05-05 01:23:00
  • 1508

Java使用AES加解密

Java使用AES加解密目录1.1生成密钥1.2密钥的存储1.3获取存储的密钥1.4加解密1.5使用存储的密钥进行加解密示例 AES是一种对称的加密算法,可基于相同的密钥进行加密和解密。Java采用A...
  • elim168
  • elim168
  • 2017-06-19 09:21:41
  • 10222

AES加密解密详解

一)什么是AES?高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。那么...
  • xiejunxing
  • xiejunxing
  • 2016-11-28 09:53:51
  • 7587

国密算法SM4,3DES算法和AES三种加密算法的java实现

国密算法SM4,3DES算法和AES三种加密算法的java实现 国密SM4 package test; import java.util.Arrays; public class SMS4 {...
  • paul342
  • paul342
  • 2015-12-17 21:54:01
  • 11042

使用java进行 AES 加密 解密

最近项目用到了加密技术,需要把数据进行加密传输,用到了AES;      百度百科是这样定义的:      高级加密标准(英语:Advanced Encryption Standard,缩写:AE...
  • qq_35973977
  • qq_35973977
  • 2017-08-30 10:57:32
  • 503

java加解密之AES使用

上一次的随笔记录了关于DES加解密算法的使用,这次的随笔是关于AES的。 因为各种算法名字,模式名字很多都是三个字母,太容易混淆了,所以单独写成一篇。 AES加密也是用得比较多的,在逆向分析中也经常遇...
  • qq_18870023
  • qq_18870023
  • 2016-08-11 17:56:24
  • 16738

AES加解密算法详解

0 AES简介   美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。   根据使用的密码长度,AES最常见的...
  • yxtxiaotian
  • yxtxiaotian
  • 2016-08-01 11:20:31
  • 7689

JAVA实现AES加密和解密

经过三周的不懈努力,终于完成了AES对文件的加密和解密。现在将自己的学习经历记下来,纪念自己三周的付出。同时也感谢网上的各位大神的博客。 AES对文件加密和解密以及打包的工具:http://downl...
  • xiaaiwu
  • xiaaiwu
  • 2015-01-15 20:21:43
  • 3210

ios与android与java通用的AES加解密

  • 2016年11月14日 11:48
  • 1.42MB
  • 下载

java,php,js;AES 互通加解密

java,php,js;AES 互通加解密
  • WD4871
  • WD4871
  • 2016-05-20 13:52:55
  • 1630
收藏助手
不良信息举报
您举报文章:AES加解密,JAVA密码器的使用
举报原因:
原因补充:

(最多只允许输入30个字)