Java DES加密解密算法

Java DES加密解密算法,第1张

package Encrypt

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方法测试一下,应该是没问题的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11592039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存