JAVA常用加密技术加密
最近看到公司一个以前项目的MD5加密方式,让我对JAVA加密感觉到一些兴趣,但是公司的MD5加密是自己写的一个MD5工具类算法类进行加密。但窝了解到一些其他的加密方式。
一、DES加密
DDES(Data Encryption Standar 数据加密标准算法)是一种常见的对称密钥加密算法,加密者使用密钥对原文加密,解密者必须使用相同的密钥才能对密文进行解密。
重点在KeyGenerator、Cipher、和Key类的使用
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
public class Test2 {
/**
* 生成密钥
*/
private void secretKey(){
String fileName = "d:/encry/密钥.dat";
try {
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
keyGen.init(56);
Key key = keyGen.generateKey();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));
out.writeObject(key);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密
*/
private void encrypt(){
String fileName = "d:/encry/密钥.dat";
try {
//读取密钥
ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
Key key = (Key) in.readObject();
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
//加密
byte[] cipherText = cipher.doFinal("aaaaasda".getBytes("UTF-8"));
//保存加密文件
FileOutputStream fileOutputStream = new FileOutputStream("d:/encry/encrypt.txt",false);
fileOutputStream.write(cipherText);
fileOutputStream.close();
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解密
*/
private void decrypt(){
try {
//读取加密文件
FileInputStream fi = new FileInputStream("d:/encryS/encrypt.txt");
byte[] cipherText = new byte[fi.available()];
fi.read(cipherText);
fi.close();
//读取密钥
ObjectInputStream in = new ObjectInputStream(new FileInputStream("d:/encry/密钥.dat"));
Key key = (Key) in.readObject();
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] text = cipher.doFinal(cipherText);
System.out.println(new String(cipherText,"UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、RSA加密(不对称密钥加密,加密和解密的密钥是不一样的,常见的方法是用户生成一对密钥,将公钥发送给别人,别人使用公钥加密,此时密文只能被用户的另一个私钥解密,有效解决了密钥传递可能产生的密钥泄露问题)
注意:KeyPairGenerator、Cipher、KeyPair类的使用
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
public class Rsa {
/**
* 生成密文
*/
private void secretKey(){
KeyPairGenerator keyPairGenerator;
try {
keyPairGenerator = KeyPairGenerator.getInstance("RSA");
//采用1024位
keyPairGenerator.initialize(1024);
KeyPair key = keyPairGenerator.generateKeyPair();
PublicKey publicKey = key.getPublic();
PrivateKey privateKey = key.getPrivate();
ObjectOutputStream ot = new ObjectOutputStream(new FileOutputStream("d:test/私钥.dat"));
ot.writeObject(privateKey);
ot.close();
ot = new ObjectOutputStream(new FileOutputStream("d:test/公钥.dat"));
ot.writeObject(privateKey);
ot.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 加密
*/
private void crypt(){
try {
ObjectInputStream os = new ObjectInputStream(new FileInputStream("d:/test/公钥.dat"));
PublicKey publicKey = (PublicKey) os.readObject();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] cipherTxt = cipher.doFinal("test".getBytes("UTF-8"));
FileOutputStream fileOutputStream = new FileOutputStream("d:/test/密文.txt",false);
fileOutputStream.write(cipherTxt);
fileOutputStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 解密
*/
private void deCrypt(){
try {
FileInputStream fileInputStream = new FileInputStream("d:/test/密文.txt");
byte[]cipherText = new byte[fileInputStream.available()];
fileInputStream.read(cipherText);
fileInputStream.close();
ObjectInputStream fi = new ObjectInputStream(new FileInputStream("d:test/私钥.dat"));
PrivateKey privateKey = (PrivateKey) fi.readObject();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] plainText = cipher.doFinal(cipherText);
System.out.println(new String(plainText,"UTF-8"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
三、信息验证(MD5),MD5算法是一种常见的消息摘要算法,它能够将原始信息文本生成一个消息摘要值,这个消息摘要值也称为哈希值,只要文本不同,就会得到一个不同的消息摘要,而且几乎不能从消息摘要反向推出原始信息文本。
主要注意:MessageDigest类的使用
四、文件签名(主要是密钥不对称加密算法的另一种应用,主要用于验证文件类容是否被篡改,原理是对原始文件使用私钥加密得到签名文件,验证者使用公钥对签名文件解密,对比原文件)
主要注意:generateKeys、sign和validateSign方法及signature方法
分享到:
相关推荐
本文将深入探讨Java中的加密技术,特别是MD5加密算法,通过实例和代码片段,帮助读者理解其工作原理及如何在实际项目中应用。 #### 一、MessageDigest与MD5算法 `MessageDigest`类是Java提供的用于实现摘要算法的...
本资源包“常用加密工具类(JAVA).zip”提供了12个不同的加密和排序工具类,以及一个log4j配置文件,旨在帮助开发者更方便地处理这些常见任务。以下是这些工具类及配置文件的详细介绍: 1. **MD5加密**:MD5...
根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。 对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的...
随着现代网络技术的飞速发展,人们的个人信息、文件传递以及电子商务等方面都需要大力的保护,文件加密技术也应运而生。本次使用JAVA语言,采用3DES加密算法进行对文本文件的加密,通过二进制和十六进制的转换来实现...
本文将深入探讨Java中常用的加密方式,主要关注对称加密和非对称加密。 首先,加密的主要目的是保护数据,防止未经授权的访问。加密可以分为双向加密和单向加密。双向加密允许信息在加密后能够被解密回原始内容,...
在这个主题中,我们将深入探讨三个关键知识点:Java中的类加载器(ClassLoader)在加密解密中的应用、常见的加密算法以及Java提供的加密技术。 首先,让我们来看看Java的类加载器如何在加密解密中发挥作用。类加载...
Java项目中的加密技术是保障信息安全的关键手段,涵盖了多种加密解密算法和证书体系。下面将详细介绍这些技术: 1. **基本的单向加密算法**: - **BASE64**:其实是一种编码方式,而非真正的加密算法。它将任意...
然而,我们可以基于这个主题,深入探讨Java中的文本加密技术,包括其背景、原理以及常见加密算法的实现。 ### Java中的文字加密 在计算机科学中,加密是保护数据安全的关键技术之一,它通过将可读信息转换为看似...
在IT行业中,加密技术是保护数据安全的重要手段。Java作为一种广泛应用的编程语言,提供了丰富的库和API用于实现各种加密算法。本资料包“加密典型代码(java)”旨在帮助开发者学习如何在Java环境中编写加密程序,...
这里我们主要讨论对称加密,因为它是Java中最常用且基础的加密方式。 对称加密是一种使用同一密钥进行加密和解密的加密技术。它的优点在于加解密速度快,适合处理大量数据。Java中实现对称加密的关键类包括`...
在IT行业中,字符串加密解密是信息安全领域的重要组成部分,它涉及到数据保护、用户隐私和...但需要注意的是,随着技术的发展,加密技术也在不断更新,开发者应当关注最新的安全标准和最佳实践,以保护用户数据的安全。
在Java中,最常用的方式是使用ZIP格式打包文件。我们可以使用`java.util.zip`包中的`ZipOutputStream`和`ZipEntry`来实现。以下是一个简单的示例: 1. 创建`ZipOutputStream`对象,指定输出的ZIP文件路径。 2. 遍历...
这个压缩包文件"Java中常用的加密算法RSA.doc"可能包含更详细的内容,如具体的代码示例、原理解释或应用场景分析。对于学习和理解Java中的RSA加密算法,阅读这份文档会是一个很好的资源。无论你是初学者还是有经验的...
4. **流操作与加密**:在Java中,可以使用BufferedInputStream和BufferedOutputStream来提高读写效率,并结合Cipher类(Java的加密/解密接口)进行数据加密和解密。通过CipherInputStream和CipherOutputStream,可以...
本篇文章将详细介绍Java中两种常见的密码加密算法:MD5(Message-Digest Algorithm 5)和SHA(Secure Hash Algorithm)。我们将通过`CodeUtil.java`这个代码文件来探讨如何在实际开发中实现这两种加密方式。 首先,...
在现代密码技术中,根据密钥类型的不同,可以将其分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称加密算法用来对敏感数据等信息进行加密,常用的算法包括 DES、3DES、AES 等。非对称...
总结,Java jar包的混淆加密是提升代码安全的重要手段,通过ProGuard等混淆工具和加密技术,可以有效降低源代码被逆向工程分析的风险。然而,安全是一个持续的过程,开发者应始终保持警惕,及时更新和优化保护策略。
Java加密技术是软件开发中一个重要的安全领域,用于保护数据的隐私和安全性。本文将深入探讨Java中实现的各种加密算法,以及如何在实际项目中应用它们。 首先,我们需要理解加密的基本概念。加密是一种将可读数据...
下面我们将详细探讨Java加密的相关知识点以及可能在JCT中涉及的技术。 1. **对称加密**:这是最常见的加密方式,使用同一密钥进行加密和解密。常见的对称加密算法有DES(Data Encryption Standard)、3DES(Triple ...