* @param arrB 需要转换的byte数组
* @return 转换后的字符串
* @throws Exception 本方法不处理任何异常,所有异常全部抛出
*/
public static String byteArr2HexStr(byte[] arrB) throws Exception {
int iLen = arrB.length
// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
StringBuffer sb = new StringBuffer(iLen * 2)
for (int i = 0i <iLeni++) {
int intTmp = arrB[i]
// 把负数转换为正数
while (intTmp <0) {
intTmp = intTmp + 256
}
// 小于0F的数需要在前面补0
if (intTmp <16) {
sb.append("0")
}
sb.append(Integer.toString(intTmp, 16))
}
return sb.toString()
}
/*
* @param strIn 需要转换的字符串
* @return 转换后的byte数组
* @throws Exception 本方法不处理任何异常,所有异常全部抛出
*/
public static byte[] hexStr2ByteArr(String strIn) throws Exception {
byte[] arrB = strIn.getBytes()
int iLen = arrB.length
// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
byte[] arrOut = new byte[iLen / 2]
for (int i = 0i <iLeni = i + 2) {
String strTmp = new String(arrB, i, 2)
arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16)
}
return arrOut
}
/**
* 加密字节数组
*
* @param arrB
*需加密的字节数组
* @return 加密后的字节数组
* @throws Exception
*/
@SuppressWarnings("restriction")
private static byte[] encrypt(byte[] arrB,String keyParameter) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE())
Key key = getKey(keyParameter.getBytes())
Cipher encryptCipher = Cipher.getInstance("DES")
encryptCipher.init(Cipher.ENCRYPT_MODE, key)
return encryptCipher.doFinal(arrB)
}
/**
* 加密字符串
*
* @param strIn
*需加密的字符串
* @return 加密后的字符串
* @throws Exception
*/
public static String encrypt(String strIn,String keyParameter) throws Exception {
return HexStrByteArrUtils.byteArr2HexStr(encrypt(strIn.getBytes(PiccConfig.PICC_INPUT_CHARSET),keyParameter))
}
/**
* 解密字节数组
*
* @param arrB
*需解密的字节数组
* @return 解密后的字节数组
* @throws Exception
*/
@SuppressWarnings("restriction")
private static byte[] decrypt(byte[] arrB,String keyParameter) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE())
Key key = getKey(keyParameter.getBytes())
Cipher decryptCipher = Cipher.getInstance("DES")
decryptCipher.init(Cipher.DECRYPT_MODE, key)
return decryptCipher.doFinal(arrB)
}
/**
* 解密字符串
*
* @param strIn
*需解密的字符串
* @return 解密后的字符串
* @throws Exception
*/
public static String decrypt(String strIn,String keyParameter) throws Exception {
return new String(decrypt(HexStrByteArrUtils.hexStr2ByteArr(strIn),keyParameter),PiccConfig.PICC_INPUT_CHARSET)
}
package Encryptimport java.security.*
import javax.crypto.*
import sun.misc.*
/**
* 使用DES加密与解密,可对byte[],String类型进行加密与解密
* 密文可使用String,byte[]存储.
* 方法:
* void getKey(String strKey)从strKey的字条生成一个Key
* String getEncString(String strMing)对strMing进行加密,返回String密文
* String getDesString(String strMi)对strMin进行解密,返回String明文
* byte[] getEncCode(byte[] byteS)byte[]型的加密
* byte[] getDesCode(byte[] byteD)byte[]型的解密
*/
public class Encrypt{
private Key key
private byte[] byteMi = null
private byte[] byteMing = null
private String strMi= ""
private String strM= ""
// 根据参数生成KEY
public void setKey(String strKey){
try{
KeyGenerator _generator = KeyGenerator.getInstance("DES")
_generator.init(new SecureRandom(strKey.getBytes()))
this.key = _generator.generateKey()
_generator=null
}
catch(Exception e){
e.printStackTrace()
}
}
// 加密String明文输入,String密文输出
public void setEncString(String strMing){
BASE64Encoder base64en = new BASE64Encoder()
try {
this.byteMing = strMing.getBytes("UTF8")
this.byteMi = this.getEncCode(this.byteMing)
this.strMi = base64en.encode(this.byteMi)
}
catch(Exception e)
{
e.printStackTrace()
}
finally
{
this.byteMing = null
this.byteMi = null
}
}
//加密以byte[]明文输入,byte[]密文输出
private byte[] getEncCode(byte[] byteS){
byte[] byteFina = null
Cipher cipher
try
{
cipher = Cipher.getInstance("DES")
cipher.init(Cipher.ENCRYPT_MODE,key)
byteFina = cipher.doFinal(byteS)
}
catch(Exception e)
{
e.printStackTrace()
}
finally
{
cipher = null
}
return byteFina
}
// 解密:以String密文输入,String明文输出
public void setDesString(String strMi){
BASE64Decoder base64De = new BASE64Decoder()
try
{
this.byteMi = base64De.decodeBuffer(strMi)
this.byteMing = this.getDesCode(byteMi)
this.strM = new String(byteMing,"UTF8")
}
catch(Exception e)
{
e.printStackTrace()
}
finally
{
base64De = null
byteMing = null
byteMi = null
}
}
// 解密以byte[]密文输入,以byte[]明文输出
private byte[] getDesCode(byte[] byteD){
Cipher cipher
byte[] byteFina=null
try{
cipher = Cipher.getInstance("DES")
cipher.init(Cipher.DECRYPT_MODE,key)
byteFina = cipher.doFinal(byteD)
}
catch(Exception e)
{
e.printStackTrace()
}
finally
{
cipher=null
}
return byteFina
}
//返回加密后的密文strMi
public String getStrMi()
{
return strMi
}
//返回解密后的明文
public String getStrM()
{
return strM
}
}
*注意:因为我用的时候是作为后台的BEAN来调用的,所以没有写main函数,也就不能直接运行了。必须加一个main()函数才能做为一个完成的JAVA程序使用。一个很简单的 main()函数就ok了,不用我写在这里了吧?呵呵!
在WEB前台调用这个BEAN文件时的语句:
<jsp:useBean id="abc" scope="page" class="oaweb.Encrypt" />
//id="abc" 用来初始化一个对象
<%
//明文加密:
String key = “06”//初始化密钥。
abc.setKey(key) //调用set函数设置密钥。
abc.setEncString(re[i][j])//将要加密的明文传送给Encrypt.java进行加密计算。
String Mi=abc.getStrMi() //调用get函数获取加密后密文。
%>
//变量Mi就是密文.
<%
//密文解密:
abc. setDesString(String Mi) //将要解密的密文传送给Encrypt.java进行解密计算。
String M=abc. String getStrM()//调用get函数获取解密后明文。
%>
//变量M就是明文.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)