admin 管理员组

文章数量: 1087139


2024年2月19日发(作者:繁体字在线转换工具)

java进行字符串加密解密算法

下面整理一下java字符串加密解密算法

?

try

{

String test = "123456789@";

EncryptionDecryption des = new

EncryptionDecryption("tourhb");// 自定义密钥

n("加密前的字符:"

+ test);

n("加密后的字符:"

+

t(test));

n("解密后的字符:"

+

t(t(test)));

n("解密后的字符:"

+

t("fe14c7c41f7d2a94b07d7928b21346e7"));

} catch

(Exception e) {

tackTrace();

}

下面是加密解密的源代码

?

import

;

import

ty;

import

;

public

class

EncryptionDecryption {

private

static

String strDefaultKey = "tourhb";

/** 加密工具 */

private

Cipher encryptCipher = null;

/** 解密工具 */

private

Cipher decryptCipher = null;

/**

* 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]

* hexStr2ByteArr(String strIn) 互为可逆的转换过程

*

* @param arrB

* 需要转换的byte数组

* @return 转换后的字符串

* @throws Exception

*

*/

public

static

String byteArr2HexStr(byte[] arrB) throws

Exception {

int

iLen = ;

// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍

StringBuffer sb = new

StringBuffer(iLen * 2);

for

(int

i = 0; i < iLen; i++) {

int

intTmp = arrB[i];

// 把负数转换为正数

while

(intTmp < 0) {

intTmp = intTmp + 256;

}

// 小于0F的数需要在前面补0

if

(intTmp < 16) {

("0");

}

(ng(intTmp, 16));

}

return

ng();

}

/**

* 将表示16进制值的字符串转换为byte数组, 和public static String

byteArr2HexStr(byte[] arrB)

* 互为可逆的转换过程

*

* @param strIn 需要转换的字符串

* @return 转换后的byte数组

* @throws Exception

*

*/

public

static

byte[] hexStr2ByteArr(String strIn) throws

Exception {

byte[] arrB = es();

int

iLen = ;

// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2

byte[] arrOut = new

byte[iLen / 2];

for

(int

i = 0; i < iLen; i = i + 2) {

String strTmp = new

String(arrB, i, 2);

arrOut[i / 2] = (byte) nt(strTmp, 16);

}

return

arrOut;

}

/**

* 默认构造方法,使用默认密钥

*

* @throws Exception

*/

public

EncryptionDecryption() throws

Exception {

this(strDefaultKey);

}

/**

* 指定密钥构造方法

*

* @param strKey

* 指定的密钥

* @throws Exception

*/

public

EncryptionDecryption(String strKey) throws

Exception {

vider(new

());

Key key = getKey(es());

encryptCipher = tance("DES");

(T_MODE, key);

decryptCipher = tance("DES");

(T_MODE, key);

}

/**

* 加密字节数组

*

* @param arrB

* 需加密的字节数组

* @return 加密后的字节数组

* @throws Exception

*/

public

byte[] encrypt(byte[] arrB) throws

Exception {

return

l(arrB);

}

/**

* 加密字符串

*

* @param strIn

* 需加密的字符串

* @return 加密后的字符串

* @throws Exception

*/

public

String encrypt(String strIn) throws

Exception {

return

byteArr2HexStr(encrypt(es()));

}

/**

* 解密字节数组

*

* @param arrB

* 需解密的字节数组

* @return 解密后的字节数组

* @throws Exception

*/

public

byte[] decrypt(byte[] arrB) throws

Exception {

return

l(arrB);

}

/**

* 解密字符串

*

* @param strIn

* 需解密的字符串

* @return 解密后的字符串

* @throws Exception

*/

public

String decrypt(String strIn) throws

Exception {

try

{

return

new

String(decrypt(hexStr2ByteArr(strIn)));

} catch

(Exception e) {

return

"";

}

}

/**

* 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位

*

* @param arrBTmp

* 构成该字符串的字节数组

* @return 生成的密钥

* @throws ion

*/

private

Key getKey(byte[] arrBTmp) throws

Exception {

// 创建一个空的8位字节数组(默认值为0)

byte[] arrB = new

byte[8];

// 将原始字节数组转换为8位

for

(int

i = 0; i < && i < ; i++) {

arrB[i] = arrBTmp[i];

}

// 生成密钥

Key key = new

KeySpec(arrB, "DES");

return

key;

}


本文标签: 字符串 数组 转换 字节 加密