代码如下:
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import javax.crypto.*;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
import com.sun.org.apache.xerces.internal.impl.dv.util.*;public class HmacMD5 {
public static String encode(String plain,String password){
KeyGenerator _generator=null;
Base64 base64En = new Base64();
try{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
_generator = KeyGenerator.getInstance("HmacMD5");
_generator.init(new SecureRandom(password.getBytes()));
Key key = _generator.generateKey();
Cipher cp=Cipher.getInstance("HmacMD5");
cp.init(Cipher.ENCRYPT_MODE, key);
byte ptext[]= plain.getBytes("gb2312");
byte ctext[]=cp.doFinal(ptext);
String cipher = base64En.encode(ctext);
return cipher;
}catch(Exception e){
System.out.println(e);
return "";
}
finally{
_generator=null;
}
}
public static String decode(String cipher,String password){
KeyGenerator _generator1=null;
Base64 base64De = new Base64();
try{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
_generator1 = KeyGenerator.getInstance("HmacMD5");
_generator1.init(new SecureRandom(password.getBytes()));
Key key = _generator1.generateKey();
Cipher cp =Cipher.getInstance("HmacMD5");
cp.init(Cipher.DECRYPT_MODE, key);
byte ctext[]=base64De.decode(cipher);
byte ptext[] = cp.doFinal(ctext);
String plain =new String(ptext,"gb2312");
return plain;
}catch(Exception ee){
System.out.println(ee);
return "";
}finally{
_generator1 =null;
}
}
public static void main(String args[]){
try{
System.out.println(encode("qwertyuiop","abcdefg"));
System.out.println(decode(encode("qwertyuiop","abcdefg"),"abcdefg"));
}catch(Exception e){
System.out.println(e);
}
}
}运行后提示错误:java.security.NoSuchAlgorithmException: Cannot find any provider supporting HmacMD5java.security.NoSuchAlgorithmException: Cannot find any provider supporting HmacMD5
java.security.NoSuchAlgorithmException: Cannot find any provider supporting HmacMD5请问这是什么错误,是不是在sunjce_provider.jar缺少了些文件?把HmacMD5改为DES却好使!怎么才能正常运行呢?
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import javax.crypto.*;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
import com.sun.org.apache.xerces.internal.impl.dv.util.*;public class HmacMD5 {
public static String encode(String plain,String password){
KeyGenerator _generator=null;
Base64 base64En = new Base64();
try{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
_generator = KeyGenerator.getInstance("HmacMD5");
_generator.init(new SecureRandom(password.getBytes()));
Key key = _generator.generateKey();
Cipher cp=Cipher.getInstance("HmacMD5");
cp.init(Cipher.ENCRYPT_MODE, key);
byte ptext[]= plain.getBytes("gb2312");
byte ctext[]=cp.doFinal(ptext);
String cipher = base64En.encode(ctext);
return cipher;
}catch(Exception e){
System.out.println(e);
return "";
}
finally{
_generator=null;
}
}
public static String decode(String cipher,String password){
KeyGenerator _generator1=null;
Base64 base64De = new Base64();
try{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
_generator1 = KeyGenerator.getInstance("HmacMD5");
_generator1.init(new SecureRandom(password.getBytes()));
Key key = _generator1.generateKey();
Cipher cp =Cipher.getInstance("HmacMD5");
cp.init(Cipher.DECRYPT_MODE, key);
byte ctext[]=base64De.decode(cipher);
byte ptext[] = cp.doFinal(ctext);
String plain =new String(ptext,"gb2312");
return plain;
}catch(Exception ee){
System.out.println(ee);
return "";
}finally{
_generator1 =null;
}
}
public static void main(String args[]){
try{
System.out.println(encode("qwertyuiop","abcdefg"));
System.out.println(decode(encode("qwertyuiop","abcdefg"),"abcdefg"));
}catch(Exception e){
System.out.println(e);
}
}
}运行后提示错误:java.security.NoSuchAlgorithmException: Cannot find any provider supporting HmacMD5java.security.NoSuchAlgorithmException: Cannot find any provider supporting HmacMD5
java.security.NoSuchAlgorithmException: Cannot find any provider supporting HmacMD5请问这是什么错误,是不是在sunjce_provider.jar缺少了些文件?把HmacMD5改为DES却好使!怎么才能正常运行呢?
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
public class Test {
public static final String KEY_MAC = "HmacMD5";
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
/**
* HMAC加密
*/
public static String encryptHMAC(byte[] data, String key) throws Exception { SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey); return byte2hex(mac.doFinal(data));
}
public static void main(String[] args) {
String key = "closewbq";
String data = "test";
try {
String out = Test.encryptHMAC(data.getBytes(), key);
System.out.println(out);
} catch (Exception e) { }
}
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
}
return hs.toUpperCase();
}
}这个程序只不过用sun的相关包,不是很好!