- 浏览: 86753 次
- 性别:
- 来自: 苏州
最新评论
-
javazeke:
自己支持一下,,,希望下周有help
求oracle11g和10g 双机热备文档 -
javazeke:
kimmking 写道mr_kairy 写道看你的结构 就是 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
yangdefeng95802 写道LZ的图是什么软件画的?真 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
mr_kairy 写道看你的结构 就是 SOA 解决方案。。 ...
江湖求方案,类似SSO系统的需求 -
javazeke:
threestone1026 写道使用cas了
感谢thre ...
江湖求方案,类似SSO系统的需求
对称加密,这东东现在已经没啥用了,但据说可以帮助我了解加密思想,我还是把它弄出来了
新手心情好的话就看看吧
首先一个帮助类,找地址的
package zeke.security; //路径的控制 public class PathUtil { public static String getPath() { String path = PathUtil.class.getResource("/").getPath(); path=path.substring(1, path.length()); return path; } }
加密解密类,有两个,一个是依据系统自带算法生成key,还有一个是可以自己输入密码生成key
依据系统自带算法生成key
package zeke.security; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; 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; /** * 对称加密密钥的生成,获取 * * @author Administrator */ public class SymmetricCipherWithKey { public static void createKey(String keyName) { try { /** * Key generators for generating keys suitable for the DES, Triple * DES, Blowfish, HMAC-MD5, and HMAC-SHA1 algorithms. * 大概的意思可以用这些算法生成keyGenerator实例 */ KeyGenerator key = KeyGenerator.getInstance("DES"); // 初始化key;如果客户端没有显式地初始化 KeyGenerator(通过调用 init 方法) // ,每个提供程序必须提供(和记录)默认初始化。 // DES-56位 // Blowfish-32~448位 // HMAC-MD5, and HMAC-SHA1-64位 key.init(56); // 获得密钥 SecretKey sk = key.generateKey(); saveObject(sk, PathUtil.getPath() + "/" + keyName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } /** * 序列化 * @param obj * @param fileURL */ public static void saveObject(Object obj, String fileURL) { try { FileOutputStream os = new FileOutputStream(fileURL); ObjectOutput oos = new ObjectOutputStream(os); oos.writeObject(obj); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 从序列化对象中获得key对象 public static SecretKey getKey(String keyName) { return (SecretKey) readerObject(PathUtil.getPath() + "/" + keyName); } /** *反 序列化 * @param fileURL * @return */ public static Object readerObject(String fileURL) { Object obj = null; try { FileInputStream fis = new FileInputStream(fileURL); ObjectInputStream is = new ObjectInputStream(fis); obj = is.readObject(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return obj; } // 对给定文本加密 public static byte[] enCipherContent(String content, String keyName) { byte[] b = null; try { Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, getKey(keyName)); b = cipher.doFinal(content.getBytes()); } 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 b; } // 解密 public static String deCipherContent(byte[] b, String keyName) { String str = null; try { Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, getKey(keyName)); str = new String(cipher.doFinal(b)); } 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 str; } }
自己输入密码生成key
package zeke.security; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; /** * 对称加密密钥的生成,获取 * * @author Administrator */ public class SymmetricCipherWithPassword { public static SecretKey createPassword(String password) { String pass=password; //需要判断pass长度,并需要长度大于8 if(pass.length()<8){ pass+="abcdefghijklmn"; } SecretKey sk=null; try { DESKeySpec desKeySpec=new DESKeySpec(pass.getBytes()); SecretKeyFactory skf=SecretKeyFactory.getInstance("DES"); sk=skf.generateSecret(desKeySpec); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeySpecException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } return sk; } /** * 序列化 * @param obj * @param fileURL */ public static void saveObject(Object obj, String fileURL) { try { FileOutputStream os = new FileOutputStream(fileURL); ObjectOutput oos = new ObjectOutputStream(os); oos.writeObject(obj); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** *反 序列化 * @param fileURL * @return */ public static Object readerObject(String fileURL) { Object obj = null; try { FileInputStream fis = new FileInputStream(fileURL); ObjectInputStream is = new ObjectInputStream(fis); obj = is.readObject(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return obj; } // 对给定文本加密 public static byte[] enCipherContent(String content, SecretKey key) { byte[] b = null; try { Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE,key ); b = cipher.doFinal(content.getBytes()); } 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 b; } // 解密 public static String deCipherContent(byte[] b, SecretKey key) { String str = null; try { Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, key); str = new String(cipher.doFinal(b)); } 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 str; } }
测试类
package zeke.security; public class Test { public static void main(String[] args) { /* //................................带文件key...................................................... //生成key文件 //SymmetricCipherKey.createKey("key"); //加密获得加密后的文本 byte[] b=SymmetricCipherWithKey.enCipherContent("I like youfdf合法安家费哈斯勒", "key"); //序列化加密文件 SymmetricCipherWithKey.saveObject(b, PathUtil.getPath()+"/jiami.txt"); //System.out.println(new String(b)); //解密 byte[] s=(byte[]) SymmetricCipherWithKey.readerObject(PathUtil.getPath()+"/jiami.txt"); String str=SymmetricCipherWithKey.deCipherContent(s, "key"); System.out.println(str); */ //.........................................口令..................................................... byte[] bs=SymmetricCipherWithPassword.enCipherContent("dsadadassault斤斤计较", SymmetricCipherWithPassword.createPassword("11")); String bsde=SymmetricCipherWithPassword.deCipherContent(bs, SymmetricCipherWithPassword.createPassword("11")); System.out.println(new String(bsde)); } }
后面还有对流进行加密,什么的,有时间也把他们封装出来。上面两个对于算法,我都是用的"DES“还有其他的,只要你再生产key和加密解密对象时重新指定就可以了,就是换个算法去算他们生成key的依据。
评论
23 楼
myreligion
2010-03-02
别用DES那个废品,56位加密技术,速度又慢又不可靠,现在早破解了。对称加密应该用AES。128位直接免费使用,256位从sun下个补丁免费使用,比DES靠谱多了。
22 楼
snowolf
2010-03-02
Pigwen 写道
对称加密作用大,没有对称加密,非对称加密的速度是无法忍受的。。。
离开了对称加密算法,非对称加密算法就是空谈!非对称加密算法中用于真正加密的算法仍是对称加密算法!LZ要反复理解DH算法的来龙去脉! Java加密技术(一)
21 楼
hcqenjoy
2009-11-23
grandboy 写道
jnoee 写道
有本红皮书,好早以前看过的,是不是叫Java Security?很不错。
楼主该了解一下基础知识。
楼主该了解一下基础知识。
我有这本书,需要的话,可以借给你。
O'Reilly Java Security, 2nd.pdf 是这个吧 google之
20 楼
javaxiang
2009-11-23
patrickyao1988 写道
grandboy 写道
jnoee 写道
有本红皮书,好早以前看过的,是不是叫Java Security?很不错。
楼主该了解一下基础知识。
楼主该了解一下基础知识。
我有这本书,需要的话,可以借给你。
是PDF的吗。。。。我也要。。
传个我吧
19 楼
hcqenjoy
2009-11-23
对称加解密 非对称加解密 数字摘要 这三大块 一般的解决方案都是三者结合应用
18 楼
javazeke
2009-11-22
O(∩_∩)O哈哈~
17 楼
linhong_1001
2009-11-22
javazeke 写道
哈哈,技术牛X,就一定能搞到money吗?不过说的也是,我刚刚学习加密这些东西,还是谦虚的好。。。谢了
看来你已经much money 了
16 楼
javazeke
2009-11-21
哈哈,技术牛X,就一定能搞到money吗?不过说的也是,我刚刚学习加密这些东西,还是谦虚的好。。。谢了
15 楼
wangzaixiang
2009-11-21
对称加密,这东东现在已经没啥用了,但据说可以帮助我了解加密思想,我还是把它弄出来了
新手心情好的话就看看吧
嗯,这个水平的认识,你不用学计算机了。没前途的。还蛮有成就感,给新手学习。
新手心情好的话就看看吧
嗯,这个水平的认识,你不用学计算机了。没前途的。还蛮有成就感,给新手学习。
14 楼
patrickyao1988
2009-11-20
grandboy 写道
jnoee 写道
有本红皮书,好早以前看过的,是不是叫Java Security?很不错。
楼主该了解一下基础知识。
楼主该了解一下基础知识。
我有这本书,需要的话,可以借给你。
是PDF的吗。。。。我也要。。
13 楼
zeeeitch
2009-11-20
rsa des是算法
ssl
pgp
Kerberos是应用协议
根据需要,协议中会分别使用对称,非对称
ssl
pgp
Kerberos是应用协议
根据需要,协议中会分别使用对称,非对称
12 楼
javazeke
2009-11-20
grandboy 写道
jnoee 写道
有本红皮书,好早以前看过的,是不是叫Java Security?很不错。
楼主该了解一下基础知识。
楼主该了解一下基础知识。
我有这本书,需要的话,可以借给你。
那的感谢啦,,是英文版的吗,英文版的看的太慢,英语不眨的啊。。。。
11 楼
grandboy
2009-11-20
jnoee 写道
有本红皮书,好早以前看过的,是不是叫Java Security?很不错。
楼主该了解一下基础知识。
楼主该了解一下基础知识。
我有这本书,需要的话,可以借给你。
10 楼
linhong_1001
2009-11-20
SSL就是这样的啊
9 楼
whaosoft
2009-11-20
非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要,但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密
8 楼
lpzp123
2009-11-20
Pigwen 写道
对称加密作用大,没有对称加密,非对称加密的速度是无法忍受的。。。
确实是这样的,一般在数据在网络传输过程中,用非对称加密算法去加密对称加密的密匙,然后非对称解密后再用对称加密的密匙去加密要传输的数据。
7 楼
imlsq
2009-11-20
对称加密的应用场合比非对称加密广泛
非对称加密慢得像只乌龟。
经典的应用场景是这样:
先用密钥 对 明文 进行对称加密
再用非对称算法加密 对称加密的 “密钥” , 从而达到 安全可靠,不可篡改的要求
非对称加密慢得像只乌龟。
经典的应用场景是这样:
先用密钥 对 明文 进行对称加密
再用非对称算法加密 对称加密的 “密钥” , 从而达到 安全可靠,不可篡改的要求
6 楼
jonahliu
2009-11-20
不可忽视对称加密,在某些特定的场合,对称加密还是优于非对称加密的。
比如说内网系统间,或是安全性要求不高的系统。
很多时候,都是非对称加密结合对称加密的。使用非对称加密方式传输对称加密的密钥,之后就采用对称加密的方式。
比如说内网系统间,或是安全性要求不高的系统。
很多时候,都是非对称加密结合对称加密的。使用非对称加密方式传输对称加密的密钥,之后就采用对称加密的方式。
5 楼
jnoee
2009-11-20
有本红皮书,好早以前看过的,是不是叫Java Security?很不错。
楼主该了解一下基础知识。
楼主该了解一下基础知识。
4 楼
cesc
2009-11-19
<div class="quote_title">Pigwen 写道</div>
<div class="quote_div">对称加密作用大,没有对称加密,非对称加密的速度是无法忍受的。。。</div>
<p> </p>
<p> 是啊,web中就是第一次交互使用非对称加密,后面都是对称加密。</p>
<div class="quote_div">对称加密作用大,没有对称加密,非对称加密的速度是无法忍受的。。。</div>
<p> </p>
<p> 是啊,web中就是第一次交互使用非对称加密,后面都是对称加密。</p>
发表评论
-
求oracle11g和10g 双机热备文档
2010-12-17 22:13 1558项目来了,,需求下来,,怕赔不起,,决定用热备 可怜的我,, ... -
江湖求方案,类似SSO系统的需求
2010-10-16 10:59 1481现有资料,大Boss交代我来弄,说实话,这东东我也不知道怎么 ... -
js array
2010-07-04 11:18 1016zhuan zi http://renxiangzyq.i ... -
Ldap之活动目录之userAccountControl
2010-04-22 10:27 3887When you open the properties fo ... -
Ldap之活动目录之属性
2010-04-22 10:19 1947“常规”标签 姓 Sn 名 Givename ... -
Ldap之活动目录介绍三
2010-04-22 10:12 1244安装第二台域控制器 在安装完第一台域控制器后其域名为 n ... -
Ldap之活动目录介绍二
2010-04-22 10:10 1313运行 Active Directory 安 ... -
Ldap之活动目录介绍一
2010-04-22 09:43 2667最近一直在做java通过Ldap去操作活动目录数据的东东,过程 ... -
我迷茫,我应该怎么走。望各位JE大哥指点!
2010-03-26 09:56 1695小弟六月毕业,在学校还算好学生,从大二起接触编程,,那时的编程 ... -
xp桌面回收站恢复
2010-02-21 19:14 863开始-运行gpedit.msc-本地计算机策略-用户配 ... -
MyEclipse7.5注册机
2010-01-25 17:29 957首先感谢提供源码的那位大牛,我只是做成了exe执行文件而已 -
DSA和RSA算法的差异
2009-11-20 19:13 15901978年就出现了这种算法 ... -
仿Google自动补全 jquery
2009-11-20 16:40 2869应大家要求,发一个包,方便大家使用,有问题欢迎e-mail : ... -
java简单对象池
2009-11-10 20:53 3973在项目中用到,自己写了个对象池的管理(创建、保留、获取),那种 ... -
仿Google自动补全 jQuery 不含索引处理 2
2009-11-08 14:39 1077Servlet。。。。。。。。。。。。。。。。。 pu ... -
仿Google自动补全 jQuery 不含索引处理
2009-11-08 14:29 1345自动补全 1. 页面有一个文本框,一个自动提示层,一个按 ... -
Java数据库通用查询及封装
2009-11-08 13:54 6279Java数据库通用查询及封装 时常在网上看到,有关Java数据 ... -
Java实现快排的算法
2009-10-14 22:28 2950Java实现快排的算法 public class Quick ... -
Collection List Set Map 区别记忆
2009-10-13 20:15 928一篇对Java集合讲解不错的文档,不是我写的,转过来和大家分享 ... -
List Set Map实现机制
2009-10-13 20:07 1899List接口对Collection进行 ...
相关推荐
在实际操作中,经常采用混合加密模式:利用非对称加密算法交换对称加密算法的密钥,再利用对称加密算法加密实际数据,从而结合两种加密算法的优点。 总之,加密算法是信息安全领域的基石,合理选择和使用加密算法...
加密主要分为两种类型:对称加密和非对称加密。这两种加密方式各有其特点,适用于不同的场景。 **对称加密** 是一种历史悠久的加密方法,它依赖于一个相同的密钥进行数据的加密和解密。这种加密方式速度快,效率高...
本实验报告主要涉及两种加密算法:对称加密算法DES(Data Encryption Standard)和非对称加密算法RSA。实验旨在帮助学生深入理解这两种算法的基本原理,并通过Python编程实现加密和解密过程。 ### **对称加密算法...
在密码学领域,数据安全是至关重要的,而对称密码和非对称密码是两种主要的加密技术,用于保护信息的机密性。本篇将深入探讨这两种密码体制及其在实际应用中的实现,特别是对DES(Data Encryption Standard)对称...
其中,对称加密和非对称加密是两种主要的加密方式,它们各自有着独特的特点和应用场景。本文将深入探讨这两种加密算法及其工作原理。 首先,对称加密是最基础且历史悠久的加密方法。它基于一个秘密的密钥,即加密和...
RSA 非对称加密算法是一种经典的非对称加密算法,由罗纳德·李维斯特、阿迪·萨莫尔和伦纳德·阿德曼三人于 1977 年共同提出的。该算法的主要思想是基于大素数的乘积和因式分解之间的关系,通过选择两个大素数 p 和 ...
- **密钥对**:非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;反之亦然。 - **信息交换过程**:甲方生成一对密钥并...
本工具包就是针对这一需求而设计的,它提供了对称加密和非对称加密两种常见的加密算法,为数据的安全传输和存储提供了保障。 对称加密是最早、最简单的一种加密方式,它的特点是加密和解密使用同一个密钥。在Java中...
在对称密码体制中,流密码(Stream Ciphers)和分组密码(Block Ciphers)是两种常见的加密方式。流密码是一种实时加密方式, encrypts a digital data stream one bit or one byte at a time。分组密码则将明文分...
加密技术可以分为对称加密和非对称加密两种方式。对称加密使用同一个密钥对数据进行加密和解密,而非对称加密使用不同的密钥对数据进行加密和解密。 对称加密: 对称加密使用同一个密钥对数据进行加密和解密。常见...
对称加密和非对称加密各有优势,在实际应用中可以根据不同的场景需求来选择合适的加密方式。对称加密适用于数据量大、实时性强的应用场景;而非对称加密则更适合于密钥分发和身份验证等场景。随着技术的发展,加密...
本篇将详细介绍这两种加密方式,并结合提供的"RsaEncryptExample"和"TdesEncryptExample"代码示例进行解析。 **1. 对称加密** 对称加密是最常见的加密方法,它使用同一个密钥进行数据的加密和解密。在C#中,`System...
数据加密是保护信息安全的主要手段,主要分为对称加密和非对称加密两种方法。本文将深入探讨这两种加密方式,并结合Mina框架,阐述如何实现它们在数据传输中的应用。 首先,我们来看对称加密。对称加密是最传统的...
在IT领域,加密技术是确保数据安全的重要手段。AES(Advanced Encryption ...在实际应用中,通常会结合使用这两种加密方式,利用RSA来安全地交换AES的密钥,然后用AES进行数据加密,这样既保证了速度,又保证了安全性。
非对称加密算法的基础理论主要源于数论和抽象代数,其中最著名的两种算法是RSA和ECC(椭圆曲线加密)。RSA是由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出的,它基于大整数因子分解的困难性。ECC则依赖于...
非对称加密技术是一种在现代信息安全领域中占据核心地位的加密方式,相较于传统的对称加密算法,它引入了一种全新的密钥管理机制,即使用一对密钥——公钥和私钥来进行加密和解密操作。这一技术的诞生,解决了信息...
在加密技术中,对称加密和非对称加密是两种主要类型。对称加密如AES,使用相同的密钥进行加密和解密,效率高但密钥管理困难。而非对称加密,如RSA,使用一对公钥和私钥,一个用于加密,另一个用于解密,安全性更高但...
在标题"vs2008对称和不对称加密解密"中,我们关注的是两种主要的加密类型:对称加密和非对称加密(通常称为不对称加密),以及如何在Visual Studio 2008(VS2008)环境中实现这两种加密的解密程序。 对称加密是一种...
非对称加密是一种重要的网络安全技术,它在C#编程中被广泛应用,特别是在文件的安全传输和存储方面。非对称加密的核心在于使用一对密钥:公钥和私钥,这两个密钥是数学上关联的,但不能互相推导。这种机制为数据提供...
非对称加密是一种重要的密码学技术,它在信息安全领域中起着至关重要的作用。与对称加密不同,非对称加密使用两个密钥:公钥和私钥。这两个密钥在数学上是相互关联的,但不能从一个轻易推导出另一个。这种特性使得非...