本示例包含了DES, DESede和AES算法。 其中AES算法的密钥长度可以为128, 192 或者 256, 但是要想正常使用192和256位的密钥长度, 需要替换JRE默认的两个策略文件local_policy.jar和US_export_policy.jar。该策略文件下载地址:
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jce_policy-6-oth-JPR@CDS-CDS_Developer
下载完后替换%JRE_HOME%\lib\security目录下的策略文件即可。
1. 环境
JDK1.6
无限制的策略文件local_policy.jar
无限制的策略文件US_export_policy.jar
commons-codec-1.4.jar
2. 代码
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import org.apache.commons.codec.binary.Base64;
/**
* 初等数据加密, 对称加密
* @author yuan
*
*/
public class SymmetricalCipher {
/**
* ALGORITHM 算法 <br>
* 可替换为以下任意一种算法,同时key值的size相应改变。
* <pre>
* DES key size must be equal to 56
* DESede(TripleDES) key size must be equal to 112 or 168
* AES key size must be equal to 128, 192 or 256,but 192 and 256 bits may not be available
* Blowfish key size must be multiple of 8, and can only range from 32 to 448 (inclusive)
* RC2 key size must be between 40 and 1024 bits
* RC4(ARCFOUR) key size must be between 40 and 1024 bits
* </pre>
*/
protected String cipherAlgorithm = "DES/EBC/PKCS5Padding"; // 算法/工作模式/填充方式
protected Key key;
private SymmetricalCipher(String keyAlgorithm, String cipherAlgorithm, int keySize)throws Exception{
this.cipherAlgorithm = cipherAlgorithm;
key = initKey(keyAlgorithm, keySize);
}
public static SymmetricalCipher getDESInstace()throws Exception{
return getDESInstace("ECB", "PKCS5Padding", 56);
}
public static SymmetricalCipher getDESInstace(String mode, String fill, int keySize)throws Exception{
return new SymmetricalCipher("DES", "DES/"+mode+"/"+fill, keySize);
}
public static SymmetricalCipher getDESedeInstance()throws Exception{
return getDESedeInstance("ECB", "PKCS5Padding", 168);
}
public static SymmetricalCipher getDESedeInstance(String mode, String fill, int keySize)throws Exception{
return new SymmetricalCipher("DESede", "DESede/"+mode+"/"+fill, keySize);
}
public static SymmetricalCipher getAESInstace()throws Exception{
return getAESInstace("ECB", "PKCS5Padding", 256);
}
public static SymmetricalCipher getAESInstace(String mode, String fill, int keySize)throws Exception{
return new SymmetricalCipher("AES", "AES/"+mode+"/"+fill, keySize);
}
public Key getKey(){
return key;
}
public String getKeyString(){
return Base64.encodeBase64String(key.getEncoded());
}
/**
* 解密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public byte[] decrypt(byte[] data) throws Exception {
Cipher cipher = Cipher.getInstance(cipherAlgorithm);
cipher.init(Cipher.DECRYPT_MODE, key);
return cipher.doFinal(data);
}
/**
* 加密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public byte[] encrypt(byte[] data) throws Exception {
Cipher cipher = Cipher.getInstance(cipherAlgorithm);
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(data);
}
/**
* 生成密钥
*
* @param seed
* @return
* @throws Exception
*/
private Key initKey(String keyAlgorithm, int keySize) throws Exception {
KeyGenerator kg = KeyGenerator.getInstance(keyAlgorithm);
kg.init(keySize);
SecretKey secretKey = kg.generateKey();
return secretKey;
}
}
3. 测试代码
SymmetricalCipher cipher = null;
cipher = SymmetricalCipher.getDESInstace();
System.out.println("DES密钥: " + cipher.getKeyString());
byte[] desData = cipher.encrypt("DES加密".getBytes());
System.out.println("密文: " + Base64.encodeBase64String(desData));
byte[] desr = cipher.decrypt(desData);
System.out.println("明文: " + new String(desr));
cipher = SymmetricalCipher.getDESedeInstance();
System.out.println("DESede密钥: " + cipher.getKeyString());
byte[] desedeData = cipher.encrypt("DESede加密".getBytes());
System.out.println("密文: " + Base64.encodeBase64String(desedeData));
byte[] desedeText = cipher.decrypt(desedeData);
System.out.println("明文: " + new String(desedeText));
cipher = SymmetricalCipher.getAESInstace();
System.out.println("AES密钥: " + cipher.getKeyString());
byte[] data = cipher.encrypt("AES加密".getBytes());
System.out.println(Base64.encodeBase64String(data));
byte[] r = cipher.decrypt(data);
System.out.println(new String(r));
分享到:
相关推荐
在实际操作中,经常采用混合加密模式:利用非对称加密算法交换对称加密算法的密钥,再利用对称加密算法加密实际数据,从而结合两种加密算法的优点。 总之,加密算法是信息安全领域的基石,合理选择和使用加密算法...
加密主要分为两种类型:对称加密和非对称加密。这两种加密方式各有其特点,适用于不同的场景。 **对称加密** 是一种历史悠久的加密方法,它依赖于一个相同的密钥进行数据的加密和解密。这种加密方式速度快,效率高...
RSA 非对称加密算法 RSA 非对称加密算法是一种经典的非对称加密算法,由罗纳德·李维斯特、阿迪·萨莫尔和伦纳德·阿德曼三人于 1977 年共同提出的。该算法的主要思想是基于大素数的乘积和因式分解之间的关系,通过...
本实验报告主要涉及两种加密算法:对称加密算法DES(Data Encryption Standard)和非对称加密算法RSA。实验旨在帮助学生深入理解这两种算法的基本原理,并通过Python编程实现加密和解密过程。 ### **对称加密算法...
登录时,用户的密码用明文传输...非对称加密算法常用RSA算法,秘钥使用base64编码成字符串,后端使用jdk8的标准API,前端使用jsencrypt.js进行RSA的对应操作。经过测试,本例中的前后端代码的加密解密计算结果是一致的。
### 对称加密与非对称加密的介绍及区别 #### 一、对称加密技术概述 **对称加密**采用了对称密码编码技术,它的核心特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥。这种方法在密码学中被称为...
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
此外,非对称加密通常用于初始化对称加密的密钥,这样可以结合两者的优点:非对称加密的安全性和对称加密的效率。 在实际应用中,这个工具包可能还包括对文件或数据流的加密解密功能,以及对加密结果的Base64编码和...
本工具是用于golang编写的,用于rsa非对称加密技术实现的对字符串的加密解密工具,可以对文件进行加密解密(txt、docx、xls文档等)。对文档加密会对文档同目录下生成一个后缀名加.hh的文档。 操作说明: 一、对字符...
非对称加密算法和数字签名是信息技术中两个关键的安全概念,尤其在网络安全和数据保护方面起着至关重要的作用。在Java编程环境中,这些技术被广泛应用于实现安全通信、身份验证和数据完整性保护。 非对称加密算法,...
本文将深入探讨对称加密的概念、工作原理,以及如何通过源代码实现文件的对称加密与解密。 对称加密是一种加密方法,其中加密和解密过程使用的是同一个密钥。这种方式简单高效,适用于大量数据的加密,因为它的计算...
6.用对方的公钥对称密钥进行加密(加密密钥) 7.将密文(5)和加密密钥(6)一起发给对方 接收方: 1.用自己的私钥对加密密钥进行解密,得到对称密钥--也只有自己才能解密。 2.用对称密钥对密文进行解密,得到...
非对称加密算法流程图,使用visio绘制。
对称加密、非对称加密、CA 认证、K8S 证书颁发机制理解 在信息安全领域中,加密和认证是两个非常重要的概念。本文将从对称加密、非对称加密、CA 认证、K8S 证书颁发机制等多方面详细介绍加密和认证的原理和机制。 ...
用mfc写的一个对称加密程序 用mfc写的一个对称加密程序 用mfc写的一个对称加密程序
### 对称与非对称加密详解 #### 一、基本概念 ##### 1.1 对称加密 在1976年之前,所有的加密技术都采用了一种模式,即发送方(甲方)和接收方(乙方)使用相同的密钥来进行加密和解密的过程。这种加密方式称为**...
非对称加密技术详解 非对称加密技术是一种在现代信息安全领域中占据核心地位的加密方式,相较于传统的对称加密算法,它引入了一种全新的密钥管理机制,即使用一对密钥——公钥和私钥来进行加密和解密操作。这一技术...
非对称加密JAVA实现,实现对超长内容进行加密
**AES非对称加密技术详解** 在信息安全领域,加密技术是保护数据安全的重要手段。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,以其高效性和安全性著称。它在数据加密中...
在IT领域,对称加密算法是一种广泛用于数据保护的技术,特别是在C#编程环境中。这种算法基于一个密钥,用于加密和解密数据,因此被称为“对称”,因为用于加密和解密的密钥是相同的。下面我们将深入探讨C#中的对称...