资源描述:
《java中的加密算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、常见加密算法简介 本文介绍常见的算法(MD5/SHA,DSA,RSA,DES)的应用场景,以及在java上的使用方法.1) MD5/SHA(MD5常用于加密用户名密码,当用户验证时。SHA加密,与MD5相似的用法,只是两者的算法不同。)MessageDigest是一个数据的数字指纹.即对一个任意长度的数据进行计算,产生一个唯一指纹号.MessageDigest的特性:A) 两个不同的数据,难以生成相同的指纹号B) 对于指定的指纹号,难以逆向计算出原始数据代表:MD5/SHAJava实现:MD5:Mess
2、ageDigest md = MessageDigest.getInstance("MD5");md.update(Constant.DATA.getBytes());byte[] result = md.digest();SHA:MessageDigest md = MessageDigest.getInstance("SHA");md.update(Constant.DATA.getBytes());byte[] result = md.digest();2) DES单密钥算法,是信息的发送方采用密钥A进行数据加密,
3、信息的接收方采用同一个密钥A进行数据解密.单密钥算法是一个对称算法.缺点:由于采用同一个密钥进行加密解密,在多用户的情况下,密钥保管的安全性是一个问题.代表:DESJava实现:首先,需要生成一个密钥,这边的做法,是把生成的密钥,保存到某个文件中.KeyGenerator gen = KeyGenerator.getInstance("DES");Key key = gen.generateKey();File keyFile = new File(Constant.CRYPT_KEY_FILE);ObjectOutputS
4、tream out = new ObjectOutputStream(new FileOutputStream(keyFile));out.writeObject(key);out.close();在生成key的时候,可以通过SecureRandom产生一个可信任的随机数源KeyGenerator gen = KeyGenerator.getInstance("DES");gen.init(new SecureRandom(seed));Key key = gen.generateKey(); 加密:Key key = ge
5、n.getKey(Constant.CRYPT_KEY_FILE);//从文件中得到密钥Cipher cipher = Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE, key); //指定是加密模式cipher.update(Constant.DATA.getBytes());byte[] result = cipher.doFinal();解密:由于DES是一个对称算法,所以解密代码跟加密代码几乎一致key = gen.getKey(Constant.C
6、RYPT_KEY_FILE);cipher.init(Cipher.DECRYPT_MODE, key); //指定是解密模式cipher.update(result);byte[] data = cipher.doFinal();由于采用了同一个密钥(key),所以两端代码中Constant.DATA.getBytes()和data的值是一致的.3) 非对称加密算法DSA数字签名的代表4) RSA公钥密码体制:为了解决单密钥保管安全性的问题,提供了公钥密码体制的概念.在公钥体制中,加密密钥不同于解密密钥,加密密钥公
7、之于众,谁都可以使用;解密密钥只有解密人自己知道。它们分别称为公开密钥(Publickey)和秘密密钥(Privatekey)。代表:RSAJava实现:同样,需要生成公钥和私钥,并且保存到相应的文件中KeyPairGenerator gen = KeyPairGenerator.getInstance(“RSA”);//以指定的长度初始化KeyPairGenerator对象,如果没有初始化系统以1024长度默认设置//参数:keysize 算法位长.其范围必须在 512 到 1024 之间,且必须为 64 的倍数gen.i
8、nitialize(1024);KeyPair pair = gen.generateKeyPair();File pubkeyFile = new File(Constant.PUB_KEY_FILE);File prikeyFile = new File(Constant.PRI_KE