java的 DES 加密解密方法 求对应C#的加密解密方法,急切

java的 DES 加密解密方法 求对应C#的加密解密方法,急切,第1张

/*

* @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 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就是明文.


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存