java加密解密算法..doc
文本预览下载声明
加密算法分类:
只能加密:SHA MD5
既能加密也能解密:
对称:DES RC4
非对称:RSA
非对称加密技术开销比较大,不适合大文本的加密。
SHA加密算法
SHA加密算法用途
数字签名、数字时间戳、数字证书
SHA加密原理以及流程
在SHA1算法中,我们必须把原始 消息(字符串,文件等)转换成位字符串位。SHA1算法只接受位作为输入。假设我们对字符串”abc”产生消息摘要(也就是加密)。首先,我们将它转换成位字符串如下:‘a’=97 ‘b’=98 ‘c’=99
这个位字符串的长度为24。下面我们需要5个步骤来计算SHA。
补位
消息必须进行补位,以使其长度在对512取模以后的余数是448,也就是说,(补位后的消息长度)len%512=448。即使长度已经满足对512取模后余数是448,补位也必须要进行。补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448.总而言之,补位是至少补一位,最多补512位。还是以前面的“abc”为例显示补位过程。
原始信息为 补位第一步 1(首先补一个1)
补位第二步 10....0(补423个0)
补长度
所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常一个64位的数据来表示原始消息的长度。在进行了补长度的操作以后,整个消息就变成下面这样了。如果原始的消息长度超过了512,我们需要将它补成512的倍数。然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。
Java代码实现SHA算法
/*
SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,
被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了,
但是SHA仍然是公认的安全加密算法,较之MD5更为安全*/
public class SHAEncode {
public static final String KEY_SHA = SHA1;
public static String shaDigest(byte[] source) throws NoSuchAlgorithmException {
String encrpt = null;
MessageDigest md = MessageDigest.getInstance(KEY_SHA);
md.update(source);
//得到数据摘要
byte[] digest = md.digest();
//把二进制数组转换成十六进制字符串
encrpt = Byte2HexStrUtil.byte2HexStr(digest);
return encrpt;
}
}
MD5加密算法
MD5算法java实现
/**
* 获取加密后的字符串
* @param input
* @return
*/
public static String md5Digest(String data) {
try {
// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
MessageDigest messageDigest =MessageDigest.getInstance(MD5);
// 输入的字符串转换成字节数组
byte[] inputByteArray = data.getBytes();
// inputByteArray是输入字符串转换得到的字节数组
messageDigest.update(inputByteArray);
// 转换并返回结果,也是字节数组,包含16个元素
byte[] resultByteArray = messageDigest.digest();
// 字符数组转换成字符串返回
return byteArrayToHex(resultByteAr
显示全部