- 浏览: 248695 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (159)
- java (38)
- extjs (6)
- jquery (3)
- struts2 (0)
- hibernate (3)
- spring (1)
- flex (1)
- css (2)
- js (3)
- html (4)
- android (4)
- linux (9)
- swing (0)
- java E-mail (0)
- 心情故事 (11)
- mysql (4)
- jbpm (7)
- 我的搜索之路 (2)
- MyBatis (3)
- 玩转svn (3)
- 生活无处不美 (0)
- 工具 (4)
- 数据统计与分析 (1)
- quartz (1)
- webservices (2)
- jboss (1)
- php (1)
- hadoop (3)
- maven (5)
- Discuz! (1)
- windows (1)
- 站长之家 (1)
- OSGi (1)
- 软件测试 (2)
- redis (4)
- git (5)
- MongoDB (4)
- lucene (3)
- freemarker (5)
- html5 (4)
- itext (1)
- nginx (1)
最新评论
-
kiansoung:
在Slave机器需不需开SecondaryNameNode程序 ...
快速了解Hadoop架构 -
忧郁的小老虎:
openjdk和jdk的区别与联系 -
TheMatrix:
...
MyBatis入门实例 -
lishl:
非常感谢分享。详细,务实。赞一个。
Lucene学习笔记【2013-04-10更新】 -
派尔人事:
关于JPA一对一关系的删除问题,有请大家帮忙,感激不尽
对称加密/解密
密和解密使用相同的密钥,有代表性的有DES、Blowfish、TEA、Base64。对称加密解密的特点是运算相对非对称加密解密简单、速度块,主要应用于需要加密大量数据的场合,例如游戏的资源文件加密。
非对称加密/解密。
加密和解密使用不同的密钥(公钥/私钥),有代表性的有RSA、DSA、ElGamal和ECDSA。非对称加密/解密的安全性是基于复杂数学难题,特点是运算复杂、速度慢,主要应用于金融、军事等重大机密的系统。
代码演示:
转载请注明出处:http://www.naxsu.com/java-an-quan-dui-cheng-fei-dui-cheng-di-jia-mi-he-jie-mi-fu-yuan-dai-ma/
密和解密使用相同的密钥,有代表性的有DES、Blowfish、TEA、Base64。对称加密解密的特点是运算相对非对称加密解密简单、速度块,主要应用于需要加密大量数据的场合,例如游戏的资源文件加密。
非对称加密/解密。
加密和解密使用不同的密钥(公钥/私钥),有代表性的有RSA、DSA、ElGamal和ECDSA。非对称加密/解密的安全性是基于复杂数学难题,特点是运算复杂、速度慢,主要应用于金融、军事等重大机密的系统。
代码演示:
package com.naxsu.security; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; import javax.crypto.Cipher; import javax.crypto.CipherOutputStream; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; /** * 对称/非对称加密与解密 */ public class SecretKeyTest { public static void main(String[] args) throws Exception { // secretEncrypt(); // secretDecrypt(); // secretEncryptByPass(); // secretDecryptByPass(); publicEncrypt(); privateDecrypt(); } /** * 对称加密,随机产生密钥 * @throws Exception */ private static void secretEncrypt() throws Exception { // Cipher:为加密和解密提供密码功能 Cipher cipher = Cipher.getInstance("AES"); // 生成密钥 SecretKey key = KeyGenerator.getInstance("AES").generateKey(); /* * 小知识: 由于key是一个对象,要把它写到文件中,所在要用ObjectOutputStream.writeObject() * 要用这个方法,这个类必须实现Serializable接口进行持久化进行对象保存,Object-->硬盘-->Object */ // 把密钥保存到secret.key文件中 saveKey(key, "secret.key"); // 根据密钥把cipher初始化为加密模式 cipher.init(Cipher.ENCRYPT_MODE, key); // cipher.update("aaa".getBytes()); // cipher.update("aaa".getBytes()); // byte[] results = cipher.doFinal(); // 对aaa进行加密操作 byte[] results = cipher.doFinal("aaa".getBytes()); System.out.println(new String(results)); // 把加密后的字符串存放到data.txt中 saveData(results, "data.txt"); } /** * 对称解密,读取存放密钥的文件获取密钥,然后根据密钥来解密 * @throws Exception */ private static void secretDecrypt() throws Exception { Cipher cipher = Cipher.getInstance("AES"); // 读取存放密钥的secret.key文件 Key key = readKey("secret.key"); // 根据密钥把cipher初始化为解密模式 cipher.init(Cipher.DECRYPT_MODE, key); // 读取data.txt文件,获取要解密的内容 byte[] src = readData("data.txt"); // 解密 byte[] result = cipher.doFinal(src); System.out.println(new String(result)); } /** * 根据密码进行对称加密 * @throws Exception */ private static void secretEncryptByPass() throws Exception { Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES"); SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES") .generateSecret(new PBEKeySpec("12345678".toCharArray())); PBEParameterSpec parameterSpec = new PBEParameterSpec(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }, 1000); cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); byte[] results = cipher.doFinal("aaa".getBytes()); System.out.println(new String(results)); saveData(results,"data.txt"); } /** * 根据密码进行对称解密 * @throws Exception */ private static void secretDecryptByPass() throws Exception { Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES"); SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES") .generateSecret(new PBEKeySpec("12345678".toCharArray())); PBEParameterSpec parameterSpec = new PBEParameterSpec(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }, 1000); cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); byte[] src = readData("data.txt"); // 解密 byte[] result = cipher.doFinal(src); System.out.println(new String(result)); } /** * 根据公钥进行非对称加密 * @throws Exception */ private static void publicEncrypt() throws Exception { Cipher cipher = Cipher.getInstance("RSA"); KeyPairGenerator kPairGenerator = KeyPairGenerator.getInstance("RSA"); KeyPair keyPair = kPairGenerator.generateKeyPair(); Key publicKey = keyPair.getPublic(); Key privateKey = keyPair.getPrivate(); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] result = cipher.doFinal("那些事儿".getBytes("UTF-8")); saveKey(privateKey, "secret2.key"); saveData(result, "data2.txt"); } /** * 根据私钥进行非对称解密 * @throws Exception */ private static void privateDecrypt() throws Exception{ Cipher cipher = Cipher.getInstance("RSA"); Key privateKey = readKey("secret2.key"); cipher.init(Cipher.DECRYPT_MODE, privateKey); //方法1: // byte[] src = readData("data2.txt"); // byte[] result=cipher.doFinal(src); // System.err.println(new String(result,"UTF-8")); //方法2: // FileInputStream fis = new FileInputStream("data2.txt"); // CipherInputStream cis = new CipherInputStream(fis, cipher); // //简单处理一下 // byte[] buf = new byte[1024]; // int len = cis.read(buf); // System.out.println(new String(buf,0,len,"UTF-8")); //方法3: FileInputStream fis = new FileInputStream("data2.txt"); FileOutputStream fos = new FileOutputStream("result.txt"); CipherOutputStream cos = new CipherOutputStream(fos, cipher); copyStream(fis, cos); cos.close(); fos.close(); fis.close(); } /** * 把输入流拷贝到输出流 * @param is * @param os * @throws IOException */ private static void copyStream(InputStream is, OutputStream os) throws IOException { byte[] buf = new byte[1024]; int len = is.read(buf); while (len != -1) { os.write(buf, 0, len); len = is.read(buf); } } /** * 把key保存到文件中 * @param key * @param fileName * @throws FileNotFoundException * @throws IOException */ private static void saveKey(Key key, String fileName) throws FileNotFoundException, IOException { FileOutputStream fosKey = new FileOutputStream(fileName); ObjectOutputStream oos = new ObjectOutputStream(fosKey); oos.writeObject(key); oos.close(); fosKey.close(); } /** * 把二进制数据保存到文件中 * @param results * @param fileName * @throws FileNotFoundException * @throws IOException */ private static void saveData(byte[] results, String fileName) throws FileNotFoundException, IOException { FileOutputStream fosData = new FileOutputStream(fileName); fosData.write(results); fosData.close(); } /** * 从文件中获取key * @param fileName * @return * @throws FileNotFoundException * @throws IOException * @throws ClassNotFoundException */ private static Key readKey(String fileName) throws FileNotFoundException, IOException, ClassNotFoundException { FileInputStream fisKey = new FileInputStream(fileName); ObjectInputStream oisKey = new ObjectInputStream(fisKey); Key key = (Key) oisKey.readObject(); oisKey.close(); fisKey.close(); return key; } /** * 从文件中读取二进制数据 * @param fileName * @return * @throws FileNotFoundException * @throws IOException */ private static byte[] readData(String fileName) throws FileNotFoundException, IOException { FileInputStream fisData = new FileInputStream(fileName); // 方法1:把输入流拷贝到输出流,再把 输出流转换为byte数组 // ByteArrayOutputStream baos = new ByteArrayOutputStream(); // copyStream(fisData, baos); // byte[] src = baos.toByteArray(); // 方法2:用available()方法来读取 // available():返回可以不受阻塞地从此输入流中读取(或跳过)的估计剩余字节数。 byte[] src = new byte[fisData.available()]; int len = fisData.read(src); int total = 0; while (total < src.length) { total += len; len = fisData.read(src, total, src.length - total); } fisData.close(); // baos.close(); return src; } }
转载请注明出处:http://www.naxsu.com/java-an-quan-dui-cheng-fei-dui-cheng-di-jia-mi-he-jie-mi-fu-yuan-dai-ma/
发表评论
-
JAVA在线视频教程之基础教程(更新完)
2013-06-03 22:54 39JAVA基础教程(更新完) 孔浩老师JAVA基 ... -
使用jcrop+springmvc实现头像上传与裁剪
2013-05-24 09:15 36使用jcrop+springmvc实现头像上传与裁剪功能 ... -
根据文章内容获取摘要的解决方案
2013-03-26 22:23 1165如果有一篇文章,根据文章内容提取出一个简短的摘要,有哪些实现方 ... -
Spring与工厂模式
2013-03-26 16:37 19671. 前言 我相信很多在刚刚使用Sprin ... -
登录成功后不刷新页面,在页面怎样获取登录用户的信息
2013-03-11 22:50 1669用ajax登录,登录成功后不刷新页面,在页面怎样获取 ... -
面试老碰壁,是不是由于基础不够牢固
2013-03-08 14:05 1836最近面试老碰壁,虽然有一定的开发经验,但问的问题虽然比较基础 ... -
这样的面试题,你能回答几个
2013-02-28 10:52 13651 ,了解hbase么,为什么存储速度快? 2理解sprin ... -
获取文章中的图片
2013-01-30 09:48 1135瀑布流的功能开发完了,感觉还不错,地址是:http:/ ... -
java cms 在线安装原理及详细步骤
2013-01-26 13:16 1130java cms 在线安装原理及详细步骤,详细代码请 ... -
java反射详解(一)_Class类
2012-11-17 09:24 688Class类 Java类用于描述一类事物的共性, ... -
领悟书生写论坛之类图设计
2012-09-20 00:37 1043大家好,今晚设计了BBS的类图,和大家分享一下。其实也比较简单 ... -
获取web根目录下的文件与类路径下的文件的方法
2012-08-06 21:41 11291.获取web项目根目录下的文件 读取web项目根目录下的某 ... -
JasperReports结合iReport制作报表-使用JasperReports生成报表
2012-06-11 22:54 1700《JasperReports结合iReport制作报表-使用i ... -
JasperReports结合iReport制作报表-使用iReport设计报表
2012-06-11 13:56 2522下载 iReport iReport ... -
学习笔记系统文章(提供PDF下载,2012-06-08 23:27更新)
2012-06-08 13:23 20972012-06-11 JasperReports结合i ... -
Java日期操作总汇
2012-06-06 08:35 828字符串转为Date对象 public sta ... -
ubuntu学习笔记2
2012-06-01 22:37 1123安装jdk <!--[if !support ... -
尚学堂科技_张志宇_SERVLET_JSP_视频教程下载地址(每集分开下载)
2012-05-27 23:49 1071由于师弟在学校的流量有限,下载也不方便,他委托我帮 ... -
移动用户资费统计系统学习笔记续一(下载附件更易阅读)
2012-05-26 23:04 789接着上一节的需求,我们再来整理一下费用明细,因为我看了好几次才 ... -
移动用户资费统计系统学习笔记
2012-05-26 08:46 814前天学习了移动用户资 ...
相关推荐
而非对称加密,如RSA、ECC,采用一对公钥和私钥,公钥用于加密,私钥用于解密,安全性更高,但计算复杂度相对较大,适合小量数据和密钥交换。 描述中的"代码完整"意味着这个工具可能包含了实现这些加密算法的源代码...
通过学习这份"Java加密与解密的艺术"的源代码,你可以深入理解加密过程的实现细节,包括密钥的生成、加密解密流程、异常处理以及如何与其他Java安全组件集成。同时,你可以看到实际项目中如何使用这些概念,从而提升...
如果C/C++和Java使用相同的密钥进行加密解密,那么密钥的安全传输和存储就至关重要。一种常见的方法是使用公钥加密技术,如RSA,来安全地交换AES的对称密钥。 此外,为了确保互通性,必须确保在C/C++和Java中都使用...
本资源“Java源码非对称加密.rar”显然包含了一些使用Java编程语言实现非对称加密算法的源代码示例。下面我们将深入探讨非对称加密的概念、原理以及Java中如何实现这一技术。 非对称加密与传统的对称加密不同,对称...
AES是一种广泛使用的对称加密算法,它在信息安全领域中扮演着重要的角色,用于保护数据的隐私和安全。 在描述中,提到了“纯C++代码开发,没调用API库”,这意味着这个实现是完全自包含的,没有依赖外部的加密库,...
这个Java程序是一个简单的加密解密工具,主要使用了异或(XOR)运算来实现文本的加密和解密。下面将详细解释其工作原理和代码结构。 首先,程序包含一个主类`Huo`和一个内部类`FirstWindow`。`Huo`类是程序的入口,而...
非对称加密如RSA、DSA,使用一对公钥和私钥,安全性更高,但计算量大,适合用于身份验证和密钥交换。 接着,书中详细讲解了数字签名、消息摘要(MD5、SHA系列)和哈希函数等概念,这些是保证数据完整性和防止篡改的...
因此,通常会结合密钥管理策略,如使用密钥派生函数(KDFs)或密钥协商协议,以及使用非对称加密(如RSA)来安全地交换AES密钥。 总之,Java中的AES加密和解密涉及到密钥生成、密码器的使用以及数据的转换。在实现...
- **非对称加密**:使用一对公钥和私钥,公钥用于加密,私钥用于解密,如RSA、DSA等。 2. **C#中的加密库**: - **System.Security.Cryptography**:C#内置的加密命名空间,提供了丰富的加密算法实现,包括对称和...
Java中的加密解密技术主要涉及对称加密和非对称加密两种策略,分别以AES和RSA作为典型代表。本文将详细介绍这两种加密技术及其在Java环境下的应用。 对称加密技术,如AES(Advanced Encryption Standard),使用...
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据安全领域,如数字签名、密钥交换等。本教程将详细讲解如何在iOS项目中使用Object-C实现RSA算法的加密和解密功能。 了解RSA的基本原理至关重要。...
因此,该源代码提供了多种选择,可以根据实际需求和安全性要求选择合适的密钥长度。 **AN324SW** 是压缩包中的一个文件,可能是相关技术文档或示例代码,可能包含了具体使用AES加密解密C语言源代码的说明、步骤以及...
RSA是一种非对称加密算法,由Ron Rivest、Adi ...通过学习和理解这段Delphi RSA源码,开发者不仅可以掌握RSA加密技术,还可以深入了解非对称加密算法的实现细节,同时提高在Delphi环境下编写安全、高效代码的能力。
文件名为"Decrypt"的压缩包可能包含一个或多个Java源代码文件,展示了DESEDE加解密的具体实现。这些代码可以作为学习和开发的参考,帮助理解上述步骤在实际代码中的应用。在实际项目中,确保遵循最佳实践,如使用...
AES加密与解密是信息安全领域中的重要技术,用于保护数据的隐私性和安全性。AES,全称为Advanced Encryption Standard,中文名为高级加密标准,是目前广泛采用的对称加密算法。本资源是一个基于Visual Studio 2008和...
在Java中,我们可以使用多种方法来实现加密,这些方法通常基于标准的加密算法,如对称加密和非对称加密。对称加密算法如DES(Data Encryption Standard)、3DES(Triple DES)和AES(Advanced Encryption Standard)...
描述中提到“生成key”,在对称加密中,密钥的管理和安全性至关重要。通常,密钥需要被安全地存储和传输,以防止被窃取。在实际应用中,可能会使用更安全的密钥生成和管理方式,如密钥派生函数(KDF)和密钥存储库。...
总之,这个Java加密程序源代码涵盖了许多核心加密概念和技术,包括但不限于对称加密、非对称加密、哈希函数、数字证书、密钥存储以及安全网络通信。深入理解并运用这些知识,可以有效提升应用程序的数据安全性和隐私...
这个文件可能包含了实现AES加密解密功能的源代码、示例、文档或其他相关资源,帮助开发者在Qt5应用程序中集成AES加密。 **总结** AES加密算法是现代加密的标准之一,常用于保护数据的安全。在Qt5开发中,可以方便...
源代码整理部分,`javaSrc175.zip`可能包含了与书中各个章节对应的示例代码,这些代码可以帮助读者更直观地理解和实现上述加密解密技术。下载并解压后,按照`下载及使用说明.txt`的指示,可以浏览和运行代码,加深对...