Ruby中Digest::SHA1.hexdigest(string)的Java实现
Author: KDr2
26
Jan
也许在处理用户密码的时候会用到
Ruby代码:
- require "digest/sha1"
-
- def sha1_hexdigest(src)
- Digest::SHA1.hexdigest(src)
- end
Java代码:
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- ...
- public static String sha1Hexdigest(String src){
- String rst = "";
- try {
- MessageDigest sha1 = MessageDigest.getInstance("sha-1");
- sha1.update(src.getBytes());
- byte[] dig = sha1.digest();
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < dig.length; i++) {
- int digByte = dig[i] & 0xFF;
- sb.append(Integer.toHexString(digByte));
- }
- rst = sb.toString();
- } catch (NoSuchAlgorithmException e) {
- rst=src;//发生错误时返回原字符串
- }
- return rst;
- }
- ...
One Response for "Ruby中Digest::SHA1.hexdigest(string)的Java实现"
你得代码中有一个bug,当这个digByte为1位数,比如等于8时,Integer.toHexString(digByte)得到的是1位数,这样在总的位数上就少一位,就是39位,而ruby得到的还是40位,你可以用”–70f0c985dc6e296be2688d37668052f58b70d192–111111–”便知。当是一位数的时候,我加入一个”0″就可以了,看代码
for (int i = 0; i < dig.length; i++) {
int digByte = dig[i] & 0xFF;
String s = Integer.toHexString(digByte);
if (s.length() == 1) {
s = “0″ + s;
}
sb.append(s);
}
Leave a reply