`

Java加密/解密之对称加密

阅读更多

对称加密:

发送方:将明文和密钥一起经过加密算法处理生成密文,然后发送给出去。

解密方:接收到密文后,使用加密密钥和相同算法的逆算法进行机密,恢复为明文。

双方使用的密钥必须相同,否则无法正确解密。

常见的几种对称算法:DES(Data Encryption Standard—数据加密标准,使用了56位的密钥)、3DES(经过3重DES加密的算法,使用3组56位密钥对数据进行3次加密,是DES的增强版)、AES(Advanced Encryption Standard—高级加密标准,设计有3个密钥长度128、192、256位,128位的AES比DES安全)。

 

DES算法示例代码:

3DES实现上程序结构与DES一致,只需要将算法名称改为DESede即可。

AES程序结构与DES一致,算法名称改为AES即可。

package com.security.example.example2;

 

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

 

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.SecretKey;

 

import org.apache.log4j.Logger;

 

/**

* 对称加密。

* 过程:发送方将明文和加密密钥一起经过加密算法处理变成密文,发送给解密方。

* 解密方接收到密文后,使用加密密钥和相同算法的逆算法对密文进行解密,恢复为明文。

* 双方使用的密钥相同。加密时使用什么密钥,解密时必须使用相同的密钥,否则无法解密。

* 对于相同的明文,不同的密钥加密和解密的结果不同。

* @author lucky star

*

*/

public class DesCipher {

private static Logger logger = Logger.getLogger(DesCipher.class);

// 密钥生成器

private KeyGenerator keygen = null;

// 保存对称密钥

private SecretKey secKey = null;

// 负责完成加密/解密

private Cipher cipher = null;

 

/**

* 使用指定算法加密/解密。

* @param algorithm

*/

public DesCipher(String algorithm) {

try {

keygen = KeyGenerator.getInstance(algorithm);

secKey = keygen.generateKey();

cipher = Cipher.getInstance(algorithm);

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchPaddingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

/**

* msg进行加密并返回密文。

* @param msg

* @return

*/

public byte[] encryp(String msg) {

try {

// Cipher.ENCRYPT_MODE:表示加密

cipher.init(Cipher.ENCRYPT_MODE, secKey);

byte[] encrypMsg = cipher.doFinal(msg.getBytes());

logger.debug("加密后是:" + new String(encrypMsg));

return encrypMsg;

} catch (InvalidKeyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (BadPaddingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

 

/**

* 解密。

* @return

*/

public byte[] decryp(byte[] encrypMsg) {

try {

cipher.init(Cipher.DECRYPT_MODE,secKey);

byte[] decrypMsg = cipher.doFinal(encrypMsg);

logger.debug("解密后的内容:" + new String(decrypMsg));

return decrypMsg;

} catch (InvalidKeyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (BadPaddingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

/**

* @param args

*/

public static void main(String[] args) {

String msg = "java安全编程技术_DES";

logger.debug("原文:" + msg);

DesCipher dc = new DesCipher("DES");

byte[] encrypMsg = dc.encryp(msg);

byte[] decrypMsg = dc.decryp(encrypMsg);

}

 

}

 

输出:

2013-01-29 14:15:14,003[main]DEBUG [main] - 原文:java安全编程技术_DES

2013-01-29 14:15:14,268[main]DEBUG [main] - 加密后是:N豣a疥噍/]薉>嘻�灹L

2013-01-29 14:15:14,268[main]DEBUG [main] - 解密后的内容:java安全编程技术_DES

分享到:
评论

相关推荐

    Java加密/解密技术

    Java加密/解密技术是Java开发中至关重要的一个领域,主要涉及到数据安全、隐私保护以及通信过程中的数据传输安全。在网络安全日益严峻的今天,掌握Java的加密和解密技术对于开发者来说至关重要。 1. **对称加密算法...

    DES加密/解密

    使用java技术编写的Des加密/解密,的工具类,已亲测可完全正确使用,无bug

    Hi3520/Hi3515 CIPHER API参考 加密/解密

    3. **AES (Advanced Encryption Standard)**:一种使用128、192或256位密钥的现代对称加密标准,被广泛认为是最安全的加密算法之一。 ### 海思通用加解密接口 #### 加解密流程 1. 初始化:调用相应的初始化函数...

    java使用AES加密/解密文件

    在IT行业中,安全是至关...以上就是关于“java使用AES加密/解密文件”的详细说明,涵盖了生成密钥、加密文件以及解密文件的核心步骤。通过理解这些知识点,开发者可以有效地保护数据的安全,防止未经授权的访问和篡改。

    C++加密/解密库

    标题提到的"C++加密/解密库"正是指这样的库,它们提供了一系列的函数和类,帮助开发者实现数据的加密和解密操作,确保信息安全。 描述虽然简洁,但暗示了我们讨论的主题是关于C++中用于加密和解密的库。这些库通常...

    关于Java中常用加密/解密方法的实现

    一、常用的加密/解密算法 1.Base64  严格来说Base64并不是一种加密/解密算法,而是一种编码方式。Base64不生成密钥,通过Base64编码后的... AES是现在对称加密算法中最流行的算法之一。 代码下载后,导入即可运行

    基于SM2算法的加密/解密/签名/验签 , SM3算法的摘要计算 , SM4算法的对称加密/解密 , 以及相应算法的公私钥

    sm3 基于SM2算法的加密/解密/签名/验签 , SM3算法的摘要计算 , SM4算法的对称加密/解密 , 以及相应算法的公私钥

    qt5AES加密,ES加密/解密算法是一种可逆的对称加密算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推

    这个文件可能包含了实现AES加密解密功能的源代码、示例、文档或其他相关资源,帮助开发者在Qt5应用程序中集成AES加密。 **总结** AES加密算法是现代加密的标准之一,常用于保护数据的安全。在Qt5开发中,可以方便...

    加密和解密文件

    对称加密如DES、3DES、AES等,其特点是加密和解密使用相同的密钥,速度快,适用于大量数据的加密。而非对称加密,如RSA、ECC,采用一对公钥和私钥,公钥用于加密,私钥用于解密,安全性更高,但计算复杂度相对较大,...

    java aes128/256 对称加密解密,rsa对称加密解密验签实现

    java aes128/256 对称加密解密,rsa对称加密解密验签实现,php java通用aes加密 支持任何形式的aes加密,文件,字符,字节等,内含php代码,可以与php平台实现aes加密,而且包含rsa非对称加密签名验签实现,都是对...

    Java RSA 加密/解密/签名 工具类

    Java RSA 加密/解密/签名工具类是Java开发中常用的一种安全技术实现,主要用于数据的保护和身份验证。RSA是一种非对称加密算法,基于大整数因子分解的困难性,提供了加密、解密以及数字签名的功能。下面将详细介绍...

    AES加密/解密算法,基于MFC下的 VC6.0

    AES(Advanced Encryption Standard)是目前广泛应用的一种对称加密算法,由NIST(美国国家标准与技术研究院)在2001年确立,替代了之前的DES(Data Encryption Standard)。它以其高效性和安全性,在信息安全领域中...

    JAVA加密和解密的艺术(第二版).zip

    总的来说,这本书是Java开发者深入学习加密解密技术的宝贵资源,无论你是初学者还是有经验的开发者,都能从中受益匪浅,提升你在网络安全领域的专业技能。通过阅读这本书,你将能够更好地应对各种安全挑战,保护你的...

    RSA加密/解密实验

    **RSA加密/解密实验** RSA加密算法是一种非对称加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种加密方式的关键在于一对公钥和私钥,其中公钥可以公开,而私钥必须保密。在RSA...

    流加密/解密算法

    流加密/解密算法在信息技术领域中扮演着重要的角色,特别是在数据传输和存储的安全性方面。Java作为一种广泛使用的编程语言,提供了丰富的库和工具来实现这些算法。在本篇文章中,我们将深入探讨基于Java的流加密和...

    Java加密与解密的艺术.mobi

    实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇既...

    姬小兵的加密/解密小程序.aps

    总之,姬小兵的加密/解密小程序是一个很好的学习平台,它涵盖了加密解密的基本概念、常用算法以及相关安全实践。通过实际操作,用户可以深入理解这些知识,并提高在日常生活中保护数据安全的能力。无论是为了个人...

    基于Java语言的国密SM2/SM3/SM4算法库 , 包含加密/解密、签名/验签、摘要算法的实现代码和测试方法

    项目中包括SM2算法的加密/解密/签名/验签 , SM3算法的摘要计算 , SM4算法的对称加密/解密 , 以及相应算法的公私钥对的生成方法。 项目测试脚本使用 在项目中的test包下SecurityTestAll.java类中的main方法下有SM2/...

    Java加密与解密的艺术 第二版(清晰+书签+完整版).pdf

    Java加密与解密的艺术 第二版(清晰+书签+完整版).pdf真正第二版,《Java加密与解密的艺术(第2版)》是Java安全领域公认的标杆之作,被奉为每一位Java开发工程师必读的著作之一。由资深专家撰写,第1版4年来畅销不...

    Android 加密/解密音频文件(AES)

    2. **创建加密/解密器**:使用 Cipher 类来执行加密或解密操作。 ```java Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // 使用CBC模式和PKCS5Padding填充 ``` 3. **初始化Cipher**:为加密或...

Global site tag (gtag.js) - Google Analytics