import 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就是明文.
/*** ECB模式的des加密,以base64的编码输出
* @param message
* @param key
* @return
* @throws Exception
*/
public static String desEncrypt(String message, String key)throws Exception{
// DES/ECB CBC CFB OFB /PKCS5Padding NoPadding 加密/模式/填充
Cipher cipher = Cipher.getInstance("DES")//默认就是 DES/ECB/PKCS5Padding
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes())
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES")
SecretKey secretKey = keyFactory.generateSecret(desKeySpec)
cipher.init(1, secretKey)
return new BASE64Encoder().encode(cipher.doFinal(message.getBytes("UTF-8")))
}
/**
* ECB模式的des解密
* @param message
* @param key
* @return
* @throws Exception
*/
public static String desDecrypt(String message, String key)throws Exception{
Cipher cipher = Cipher.getInstance("DES")
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes())
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES")
SecretKey secretKey = keyFactory.generateSecret(desKeySpec)
cipher.init(2, secretKey)
return new String(cipher.doFinal(Base64.decode(message)), "UTF-8")
}
你自己写main方法测试一下,应该是没问题的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)