怎么用java实现HMAC-SHA1啊?紧急ing。。。。

[复制链接]
查看11 | 回复4 | 2006-1-10 14:41:39 | 显示全部楼层 |阅读模式
我在SUN的主页上看到一个例子
以下代码为JAVABEAN,加密用
[PHP]
package test;
/*
* Copyright 1997-2001 by Sun Microsystems, Inc.,
* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
* All rights reserved.
*
* This software is the confidential and proprietary information
* of Sun Microsystems, Inc. ("Confidential Information&quot

. You
* shall not disclose such Confidential Information and shall use
* it only in accordance with the terms of the license agreement
* you entered into with Sun.
*/
import java.security.*;
import javax.crypto.*;
/*
* This program demonstrates how to generate a secret-key object for
* HMAC-SHA1, and initialize an HMAC-SHA1 object with it.
*/
public class initMac {
public initMac() {
}
//定义加密算法
String Algorithm = "HmacSHA1";
public byte[] HmacSHA1(String post) throws Exception {
// Generate secret key for HMAC-SHA1
KeyGenerator kg = KeyGenerator.getInstance(Algorithm);
SecretKey sk = kg.generateKey();
// Get instance of Mac object implementing HMAC-SHA1, and
// initialize it with the above secret key
Mac mac = Mac.getInstance(Algorithm);
mac.init(sk);
byte[] result = mac.doFinal(post.getBytes());
return result;
}
}
[/PHP]
以下代码为调用上面JAVABEAN的部分
[PHP]package test;
import test.initMac;
/**
* Title:
*
* Description:
*
* Copyright: Copyright (c) 2005
*
* Company:
*
* @author not attributable
* @version 1.0
*/
public class login {
public static void main(String[] args) {
login my = new login();
my.run();
}
public void run(){
String post = "a";
initMac iMac = new initMac();
try {
byte[] rs = iMac.HmacSHA1(post);
System.out.println("加密前的信息:" + post);
System.out.println("加密后的二\u8FDB串:" + byte2hex(rs));
} catch (Exception ex) {
}
}
public String byte2hex(byte[] b)
//二行制\u8F6C字符串
{
String hs = "";
String stmp = "";
for (int n = 0; n 复制代码
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
是的,必须使用HmacSHA1算法,如果有例子那是最好了
非常感谢,我正在研究你的CODE
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
这是一个基于SHA1的消息验证算法。据我所知无法解密。
应为SHA1和MD5一样是一种摘要算法,无法实现逆运算。
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
经过昨天的学习,总结如下:
HMAC-MD5和HMAC-SHA1是认证信息,或摘要信息
属于单向函数,不可逆
但请看下面的内容:
麻烦来看一下这里http://tech.ccidnet.com/art/297/20051102/363689_7.html
中间有一段话(第一段):
“KeyGenerator 在DSA中已经说明,在添加JCE后在instance进可以如下参数:”
“DES,DESede,Blowfish,HmacMD5,HmacSHA1”
在DES安全程序里还有几句(第二段):
//添加新安全算法,如果用JCE就要把它添加进去
  Security.addProvider(new com.sun.crypto.provider.SunJCE());
这两段不明白,能帮忙解释一下吗?
第一段,其中DES指的是对称加密算法,而HmacSHA1指的是认证或摘要,那他们为什么能相提并论呢?
第二段,添加新的算法,只要这一句就够了吗?而这里添加了新的算法,应该指添加了MD5和SHA1 吧?
回复

使用道具 举报

千问 | 2006-1-10 14:41:39 | 显示全部楼层
KeyGenerator 只是帮你产生一个用于加密的密钥
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行