您的位置:首页 > 编程语言 > Java开发

Java SHA-256 算法实例

2009-12-02 20:58 465 查看
一)java.security.MessageDigest 类:

此 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。

MessageDigest 对象开始被初始化。该对象通过使用
update
方法处理数据。任何时候都可以调用
reset
方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用
digest
方法之一完成哈希计算。

对于给定数量的更新数据,
digest
方法只能被调用一次。在调用
digest
之后,MessageDigest 对象被重新设置成其初始状态。

该实现可随意选择是否实现 Cloneable 接口。客户端应用程可以通过尝试复制和捕获 CloneNotSupportedException 来测试可复制性:

MessageDigest md = MessageDigest.getInstance("SHA");

try {
md.update(toChapter1);
MessageDigest tc1 = md.clone();
byte[] toChapter1Digest = tc1.digest();
md.update(toChapter2);
...etc.
} catch (CloneNotSupportedException cnse) {
throw new DigestException("couldn't make digest of partial content");
}

注意,如果给定的实现是不可复制的,而事先已经知道摘要的数目,则仍然能够通过实例化几个实例计算中间摘要。

注意,由于历史原因,此类是抽象类,是从
MessageDigestSpi
扩展的。应用程序开发人员只需注意在此
MessageDigest
类中定义的方法;超类中的所有方法是供希望提供自己的信息摘要算法实现的加密服务提供者使用的。

二)实例代码:

package org.zhang.sha_256;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class StringEncrypt {
/**
* 对字符串加密,加密算法使用MD5,SHA-1,SHA-256,默认使用SHA-256
*
* @param strSrc
* 要加密的字符串
* @param encName
* 加密类型
* @return
*/
public static String Encrypt(String strSrc, String encName) {
MessageDigest md = null;
String strDes = null;

byte[] bt = strSrc.getBytes();
try {
if (encName == null || encName.equals("")) {
encName = "SHA-256";
}
md = MessageDigest.getInstance(encName);
md.update(bt);
strDes = bytes2Hex(md.digest()); // to HexString
} catch (NoSuchAlgorithmException e) {
return null;
}
return strDes;
}

public static String bytes2Hex(byte[] bts) {
String des = "";
String tmp = null;
for (int i = 0; i < bts.length; i++) {
tmp = (Integer.toHexString(bts[i] & 0xFF));
if (tmp.length() == 1) {
des += "0";
}
des += tmp;
}
return des;
}

public static void main(String args[]){
String s=StringEncrypt.Encrypt("汪业培", "");
System.out.println(s);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: