问题如题。 代码:
package com.entity;import java.security.MessageDigest;/**
* 数字签名SHA-1加密�?
*/
public class SHA1Encrypt {
//加密
public static byte[] encrypt(String str) {
byte[] digesta = null;
try {
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(str.getBytes());
digesta=alga.digest();
}catch (Exception e) {
e.printStackTrace();
}
return digesta;
}
//解密
public static boolean decrypt(String str,byte[] digesta) {
try {
MessageDigest algb=MessageDigest.getInstance("SHA-1");
algb.update(str.getBytes());
if (MessageDigest.isEqual(digesta,algb.digest())) {
return true;
}
else
{
return false;
}
} catch (Exception e){
e.printStackTrace();
}
return false;
}
}
package com.entity;import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
* 3DES加密解密
*/
public class DES3Encrypt { private String Algorithm = UDBConstant.ENCRYPT_TYPE;// 定义 加密算法,
//可用 DES,DESede,Blowfish, CBC是运算模式, PKCS7Padding是填充模�?
private SecretKey secretkey; //秘密密钥
private Cipher cipher; //此类提供了针对加密和解密的密�?cipher 功能
private byte[] cipherByte; //加解密后的字节数�?
private IvParameterSpec zeroIv; //向量
private static DES3Encrypt instance;
private static final String fixKey = UDBConstant.FIX_KEY;
private static final byte[] iv = UDBConstant.IV; /**
* Initial key
*/
private DES3Encrypt() {
init(fixKey, iv);
}
/**
* 初始化该�?
* @param fixKey
* @param iv
*/
private void init(String fixKey, byte[] iv) {
try {
zeroIv = new IvParameterSpec(iv);
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
secretkey = new SecretKeySpec(fixKey.getBytes(), "DESede");
cipher = Cipher.getInstance(Algorithm,"BC");
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
} catch (NoSuchPaddingException ex) {
ex.printStackTrace();
}catch (NoSuchProviderException e) {
e.printStackTrace();
}
}
public static DES3Encrypt getInstance(){
instance = new DES3Encrypt();
return instance;
}
/**
* Enrypt 3DES加密
* @param str
* @return
*/
public byte[] encrypt(String str) {
try {
cipher.init(Cipher.ENCRYPT_MODE, secretkey, zeroIv);
cipherByte = cipher.doFinal(str.getBytes("UTF-8"));
} catch (java.security.InvalidKeyException ex) {
ex.printStackTrace();
} catch (javax.crypto.BadPaddingException ex) {
ex.printStackTrace();
} catch (javax.crypto.IllegalBlockSizeException ex) {
ex.printStackTrace();
}catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return cipherByte;
}
/**
* decrypt 3DES解密
* @param buff
* @return
*/
public String decrypt(byte[] buff) {
String result = "";
try {
cipher.init(Cipher.DECRYPT_MODE, secretkey, zeroIv);
cipherByte = cipher.doFinal(buff);
result = new String(cipherByte, "UTF-8");
} catch (java.security.InvalidKeyException ex) {
ex.printStackTrace();
} catch (javax.crypto.BadPaddingException ex) {
ex.printStackTrace();
} catch (javax.crypto.IllegalBlockSizeException ex) {
ex.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
}
package com.entity;import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;/**
* Used to encode and decode.
*/
public class Base64Coding { public static String encode(String str) {
String result = encode(str.getBytes());
return result;
} public static String encode(byte[] str) {
byte[] temp = Base64.encodeBase64(str);
return new String(temp);
} public static String decode(String str) {
byte[] temp = Base64.decodeBase64(str.getBytes());
String result = new String(temp);
return result;
}
public static String decodeHex(String str) {
byte[] temp = Base64.decodeBase64(str.getBytes());
String result = HexStrTrans.getHex(temp);
return result;
}
public static byte[] decodeBase64ToByte(String str){
BASE64Decoder decoder = new BASE64Decoder();
try {
return decoder.decodeBuffer(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}这是程序中调用以上三个类的加密方法:
public static boolean checkAuthenticator (String authenticator,String str) {
boolean result = false;
if (authenticator != null && authenticator.length() <= UDBConstant.AUTHENTICATOR_LENGTH && str != null) {
System.out.println("str: "+str);
byte[] sha1 = SHA1Encrypt.encrypt(str);
System.out.println("sha1: "+sha1.toString());
byte[] des3 = DES3Encrypt.getInstance().encrypt(sha1.toString());
System.out.println("des3: "+des3.toString());
String strToBase64 =Base64Coding.encode(des3);
System.out.println("strToBase64: "+strToBase64.toString());
if (authenticator.equals(strToBase64)) {
result = true;
}
}
return result;
}
调用该方法需要的参数authenticator就是调用下面的测试方法得到的strToBase64 值,
str="1900000001000101111111011-2-12 11:37:52"
package com.test;import org.junit.Test;import com.entity.Base64Coding;
import com.entity.DES3Encrypt;
import com.entity.SHA1Encrypt;public class DESTest {
@Test
public void getTWOString(){
byte[] sha1 = SHA1Encrypt.encrypt("1900000001000101111111011-2-12 11:37:52");
System.out.println("sha1: "+sha1.toString());
byte[] des3 = DES3Encrypt.getInstance().encrypt(sha1.toString());
System.out.println("des3: "+des3.toString());
String strToBase64 =Base64Coding.encode(des3);
System.out.println("strToBase64: "+strToBase64.toString());
}
}
package com.entity;import java.security.MessageDigest;/**
* 数字签名SHA-1加密�?
*/
public class SHA1Encrypt {
//加密
public static byte[] encrypt(String str) {
byte[] digesta = null;
try {
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(str.getBytes());
digesta=alga.digest();
}catch (Exception e) {
e.printStackTrace();
}
return digesta;
}
//解密
public static boolean decrypt(String str,byte[] digesta) {
try {
MessageDigest algb=MessageDigest.getInstance("SHA-1");
algb.update(str.getBytes());
if (MessageDigest.isEqual(digesta,algb.digest())) {
return true;
}
else
{
return false;
}
} catch (Exception e){
e.printStackTrace();
}
return false;
}
}
package com.entity;import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
* 3DES加密解密
*/
public class DES3Encrypt { private String Algorithm = UDBConstant.ENCRYPT_TYPE;// 定义 加密算法,
//可用 DES,DESede,Blowfish, CBC是运算模式, PKCS7Padding是填充模�?
private SecretKey secretkey; //秘密密钥
private Cipher cipher; //此类提供了针对加密和解密的密�?cipher 功能
private byte[] cipherByte; //加解密后的字节数�?
private IvParameterSpec zeroIv; //向量
private static DES3Encrypt instance;
private static final String fixKey = UDBConstant.FIX_KEY;
private static final byte[] iv = UDBConstant.IV; /**
* Initial key
*/
private DES3Encrypt() {
init(fixKey, iv);
}
/**
* 初始化该�?
* @param fixKey
* @param iv
*/
private void init(String fixKey, byte[] iv) {
try {
zeroIv = new IvParameterSpec(iv);
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
secretkey = new SecretKeySpec(fixKey.getBytes(), "DESede");
cipher = Cipher.getInstance(Algorithm,"BC");
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
} catch (NoSuchPaddingException ex) {
ex.printStackTrace();
}catch (NoSuchProviderException e) {
e.printStackTrace();
}
}
public static DES3Encrypt getInstance(){
instance = new DES3Encrypt();
return instance;
}
/**
* Enrypt 3DES加密
* @param str
* @return
*/
public byte[] encrypt(String str) {
try {
cipher.init(Cipher.ENCRYPT_MODE, secretkey, zeroIv);
cipherByte = cipher.doFinal(str.getBytes("UTF-8"));
} catch (java.security.InvalidKeyException ex) {
ex.printStackTrace();
} catch (javax.crypto.BadPaddingException ex) {
ex.printStackTrace();
} catch (javax.crypto.IllegalBlockSizeException ex) {
ex.printStackTrace();
}catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return cipherByte;
}
/**
* decrypt 3DES解密
* @param buff
* @return
*/
public String decrypt(byte[] buff) {
String result = "";
try {
cipher.init(Cipher.DECRYPT_MODE, secretkey, zeroIv);
cipherByte = cipher.doFinal(buff);
result = new String(cipherByte, "UTF-8");
} catch (java.security.InvalidKeyException ex) {
ex.printStackTrace();
} catch (javax.crypto.BadPaddingException ex) {
ex.printStackTrace();
} catch (javax.crypto.IllegalBlockSizeException ex) {
ex.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
}
package com.entity;import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;/**
* Used to encode and decode.
*/
public class Base64Coding { public static String encode(String str) {
String result = encode(str.getBytes());
return result;
} public static String encode(byte[] str) {
byte[] temp = Base64.encodeBase64(str);
return new String(temp);
} public static String decode(String str) {
byte[] temp = Base64.decodeBase64(str.getBytes());
String result = new String(temp);
return result;
}
public static String decodeHex(String str) {
byte[] temp = Base64.decodeBase64(str.getBytes());
String result = HexStrTrans.getHex(temp);
return result;
}
public static byte[] decodeBase64ToByte(String str){
BASE64Decoder decoder = new BASE64Decoder();
try {
return decoder.decodeBuffer(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}这是程序中调用以上三个类的加密方法:
public static boolean checkAuthenticator (String authenticator,String str) {
boolean result = false;
if (authenticator != null && authenticator.length() <= UDBConstant.AUTHENTICATOR_LENGTH && str != null) {
System.out.println("str: "+str);
byte[] sha1 = SHA1Encrypt.encrypt(str);
System.out.println("sha1: "+sha1.toString());
byte[] des3 = DES3Encrypt.getInstance().encrypt(sha1.toString());
System.out.println("des3: "+des3.toString());
String strToBase64 =Base64Coding.encode(des3);
System.out.println("strToBase64: "+strToBase64.toString());
if (authenticator.equals(strToBase64)) {
result = true;
}
}
return result;
}
调用该方法需要的参数authenticator就是调用下面的测试方法得到的strToBase64 值,
str="1900000001000101111111011-2-12 11:37:52"
package com.test;import org.junit.Test;import com.entity.Base64Coding;
import com.entity.DES3Encrypt;
import com.entity.SHA1Encrypt;public class DESTest {
@Test
public void getTWOString(){
byte[] sha1 = SHA1Encrypt.encrypt("1900000001000101111111011-2-12 11:37:52");
System.out.println("sha1: "+sha1.toString());
byte[] des3 = DES3Encrypt.getInstance().encrypt(sha1.toString());
System.out.println("des3: "+des3.toString());
String strToBase64 =Base64Coding.encode(des3);
System.out.println("strToBase64: "+strToBase64.toString());
}
}
解决方案 »
- 一个视频播放的标签在HTML页面上可以播放为什么在工程中的JSP页面里就不行了呢
- 各位来帮帮我 这问题困扰我一下午 一直没法解决............
- Servlet里用out.println("<html>")输出的网页怎么设置背景色呢
- 请教:在form里设置enctype="multipart/form-data"后,一般的属性怎么才能读取到?
- 不知道哪里有开源的sns社区网站
- 用xstream生成xml字符串怎样能没有空格回车。
- 初学者接触连接池,请教各位高手,分不够再加!!
- 一个使用jquery.validate.js对动态生成的文本框的验证问题
- 谁有关于虚拟实验室的相关代码或者可以下载的地方(分不够可以再加)急!!!
- 招聘兼职EJB/Jsp/Servlet高手
- displaytag column标签 双击弹出页面
- 请高手指点一下
配置文件中:#3DES公钥
fix_key=AAAAAAAABBBBBBBB
UDBConstant.FIX_KEY
UDBConstant.IV这三个值你是怎么定义的!你给我一组数据我帮你测测
//公钥
public static final String FIX_KEY = SystemMessage.getString("fix_key");
//向量
public static final byte[] IV = {'1','2','3','4','5','6','7','8'};
//加密算法
public static final String ENCRYPT_TYPE = SystemMessage.getString("encrypt_type");#加密算法
encrypt_type=DESede/CBC/PKCS7Padding
#3DES公钥
fix_key=AAAAAAAABBBBBBBB