第2章在JAVA中的实现
2.1. 相关
Diffie-Hellman密钥一致协议和DES程序需要JCE工具库的支持,可以到 http://java.sun.com/security/index.html 下载JCE,并进行安装。简易安装把 jce1.2.1\lib 下的所有内容复制到 %java_home%\lib\ext下,如果没有ext目录自行建立,再把jce1_2_1.jar和sunjce_provider.jar添加到CLASSPATH内,更详细说明请看相应用户手册
2.2. 消息摘要MD5和SHA的使用
使用方法:
首先用生成一个MessageDigest类,确定计算方法
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
添加要进行计算摘要的信息
alga.update(myinfo.getBytes());
计算出摘要
byte[] digesta=alga.digest();
发送给其他人你的信息和摘要
其他人用相同的方法初始化,添加信息,最后进行比较摘要是否相同
algb.isEqual(digesta,algb.digest())
相关AIP
java.security.MessageDigest 类
static getInstance(String algorithm)
返回一个MessageDigest对象,它实现指定的算法
参数:算法名,如 SHA-1 或MD5
void update (byte input)
void update (byte[] input)
void update(byte[] input, int offset, int len)
添加要进行计算摘要的信息
byte[] digest()
完成计算,返回计算得到的摘要(对于MD5是16位,SHA是20位)
void reset()
复位
static boolean isEqual(byte[] digesta, byte[] digestb)
比效两个摘要是否相同
代码:
import java.security.*;
public class myDigest {
public static void main(String[] args) {
myDigest my=new myDigest();
my.testDigest();
}
public void testDigest()
{
try {
String myinfo="我的测试信息";
//java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5");
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(myinfo.getBytes());
byte[] digesta=alga.digest();
System.out.println("本信息摘要是:"+byte2hex(digesta));
//通过某中方式传给其他人你的信息(myinfo)和摘要(digesta) 对方可以判断是否更改或传输正常
java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
algb.update(myinfo.getBytes());
if (algb.isEqual(digesta,algb.digest())) {
System.out.println("信息检查正常");
}
else
{
System.out.println("摘要不相同");
}
}
catch (java.security.NoSuchAlgorithmException ex) {
System.out.println("非法摘要算法");
}
}
public String byte2hex(byte[] b) //二行制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
}
2.3. 数字签名DSA
- 对于一个用户来讲首先要生成他的密钥对,并且分别保存
生成一个KeyPairGenerator实例
java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance("DSA");
如果设定随机产生器就用如相代码初始化
SecureRandom secrand=new SecureRandom();
secrand.setSeed("tttt".getBytes()); //初始化随机产生器
keygen.initialize(512,secrand); //初始化密钥生成器
否则
keygen.initialize(512);
生成密钥公钥pubkey和私钥prikey
KeyPair keys=keygen.generateKeyPair(); //生成密钥组
PublicKey pubkey=keys.getPublic();
PrivateKey prikey=keys.getPrivate();
分别保存在myprikey.dat和mypubkey.dat中,以便下次不在生成
(生成密钥对的时间比较长
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myprikey.dat"));
out.writeObject(prikey);
out.close();
out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("mypubkey.dat"));
out.writeObject(pubkey);
out.close();
用他私人密钥(prikey)对他所确认的信息(info)进行数字签名产生一个签名数组
从文件中读入私人密钥(prikey)
java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("myprikey.dat"));
PrivateKey myprikey=(PrivateKey)in.readObject();
in.close();
初始一个Signature对象,并用私钥对信息签名
java.security.Signature signet=java.security.Signature.getInstance("DSA");
signet.initSign(myprikey);
signet.update(myinfo.getBytes());
byte[] signed=signet.sign();
把信息和签名保存在一个文件中(myinfo.dat)
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myinfo.dat"));
out.writeObject(myinfo);
out.writeObject(signed);
out.close();
把他的公钥的信息及签名发给其它用户
先把地址粘出来晚些再全粘出来吧:http://www.ibm.com/developerworks/cn/java/l-security/index.html
分享到:
相关推荐
"jdbc用MD5对密码进行加密 完整"这个主题涉及到的是如何使用Java JDBC(Java Database Connectivity)来实现用户密码的MD5加密,以提高数据安全性。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它...
总的来说,MD5是一种快速但不再安全的哈希函数,曾被广泛用于密码加密,但由于安全性问题,现在已经逐渐被更强大的加密技术取代。在设计密码存储系统时,应该优先考虑使用现代的加密方法,以保护用户的密码安全。
它们首先创建一个`MessageDigest`实例,然后使用`digest()`方法对输入的密码字符串进行散列处理,最后将结果转换为16进制字符串。 在实际应用中,为了增加安全性,通常会将散列值与盐值(salt)结合后再进行散列。...
标题"druid实现springmvc数据库连接的用户名和密码加密"指出,我们要讨论的是如何在Spring MVC项目中利用Druid连接池进行更高级别的安全性配置,即对数据库连接的敏感信息进行加密。这通常涉及以下步骤: 1. **密码...
在IT行业中,密码的安全性是至关重要的,尤其是在网络服务中,如用户登录...总的来说,MD5在Java中的使用提供了一种简单的密码加密方式,但随着技术的发展,开发者应考虑使用更强大的加密策略来保护用户的敏感信息。
总结一下,Java中的密码加密与解密主要涉及哈希函数如MD5和更安全的派生函数如PBKDF2。MD5虽然广泛使用,但因存在安全风险,现在更多地被用作基本的验证,而非密码存储。在实际应用中,应当结合加盐和多次迭代来提高...
### 在Java中使用MD5进行密码加密 #### 知识点概述 在现代软件开发过程中,安全性至关重要。尤其是在处理敏感信息如用户密码时,确保数据的安全性和隐私性尤为重要。MD5(Message-Digest Algorithm 5)是一种广泛...
在实际应用中,`MessageDigest`通常与其他技术结合使用,比如在用户密码存储时,我们会先将用户输入的明文密码通过`MessageDigest`进行哈希,然后将哈希值存储在数据库中。这样即使数据库被泄露,攻击者也无法直接...
在应用启动时,会读取这个加密后的密码,然后进行解密操作,与用户输入的明文密码进行比对。具体的解密过程取决于加密策略,如果只是简单地MD5加密,那么通常不会解密,而是直接在连接池中使用加密后的密码连接...
Java密码加密技术主要涉及到数据安全领域,用于保护敏感信息,防止未经授权的访问和篡改。在Java中,我们可以使用多种加密算法来实现这一目标。以下是一些常见的加密算法及其简单的Java实现: 1. 消息摘要(数字...
这种转换过程是不可逆的,也就是说无法从散列后的结果反推出原始数据,这使得MD5非常适合用于密码加密。 #### 二、MD5的工作原理 1. **输入**: MD5可以接受任何形式的输入,无论是文本还是二进制数据。 2. **处理*...
二、JAVA 中使用 MD5 加密实现密码加密 在 JAVA 中使用 MD5 加密实现密码加密需要借助 MessageDigest 和 BASE64Encoder 两个类。MessageDigest 类用于对数据进行加密,而 BASE64Encoder 类用于将加密后的数据转换为...
在Java中,我们可以使用`java.security.MessageDigest`类来实现MD5加密。在用户注册或登录时,先将密码转换为MD5摘要,然后与数据库中存储的MD5值进行比对,确保密码的安全性。 为了实现这些功能,项目中可能包含...
在你下载的"MD5密码加密技术.zip"文件中,可能包含了上述Java代码示例,以及如何将这些加密后的MD5值与MySQL数据库进行交互的示例。你可以直接运行这些代码,以理解和应用MD5密码加密技术。通过学习和实践这个代码,...
MD5的主要用途是验证数据的完整性和一致性,以及在某些场景下作为简单的密码加密手段。 在IT行业中,MD5加密主要用于存储用户密码。当用户注册时,他们的密码不是以明文形式存储,而是通过MD5算法进行哈希处理,...
本文将深入探讨Java中的加密技术,包括RSA、MD5、SHA256和SHA512等算法,以及如何通过示例(Demo)进行实际操作。 首先,让我们了解一下这些概念: 1. **RSA**:RSA是一种非对称加密算法,由Ron Rivest、Adi ...
MD5算法在Java中通常用于密码加密、文件校验等方面,因为它可以提供一种相对安全的方式来存储和验证用户密码。 在Java中,我们可以使用`java.security.MessageDigest`类来实现MD5加密。首先,需要获取MD5的实例,这...
在用户登录时,我们将输入的密码与salt值一起进行同样的MD5加密,然后与数据库中存储的哈希值进行匹配,以此来验证用户的登录信息。 至于用户界面,设计应包括用户名、密码输入框,以及注册、登录按钮。注册时,...