java cookie 加密_jquery实现登录加密的几种方法以及cookie存放加密/解密

本文介绍了如何使用Java实现DES(Data Encryption Standard)算法进行加解密操作,包括加密函数encryption和解密函数decryption的详细实现,以及处理可能遇到的异常情况如NoSuchAlgorithmException、NoSuchPaddingException等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;importjava.security.spec.InvalidKeySpecException;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.NoSuchPaddingException;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;/*** DES加解密工具类

**/

public classDESUtil {private static final String DES_ALGORITHM = "DES";/*** DES加密

*

*@paramplainData 原始字符串

*@paramsecretKey 加密密钥

*@return加密后的字符串

*@throwsException*/

public static String encryption(String plainData, String secretKey) throwsException {

Cipher cipher= null;try{

cipher=Cipher.getInstance(DES_ALGORITHM);

cipher.init(Cipher.ENCRYPT_MODE, generateKey(secretKey));

}catch(NoSuchAlgorithmException e) {

e.printStackTrace();

}catch(NoSuchPaddingException e) {

e.printStackTrace();

}catch(InvalidKeyException e) {

}try{//为了防止解密时报javax.crypto.IllegalBlockSizeException: Input length must//be multiple of 8 when decrypting with padded cipher异常,//不能把加密后的字节数组直接转换成字符串

byte[] buf =cipher.doFinal(plainData.getBytes());returnBase64Utils.encode(buf);

}catch(IllegalBlockSizeException e) {

e.printStackTrace();throw new Exception("IllegalBlockSizeException", e);

}catch(BadPaddingException e) {

e.printStackTrace();throw new Exception("BadPaddingException", e);

}

}/*** DES解密

*@paramsecretData 密码字符串

*@paramsecretKey 解密密钥

*@return原始字符串

*@throwsException*/

public static String decryption(String secretData, String secretKey) throwsException {

Cipher cipher= null;try{

cipher=Cipher.getInstance(DES_ALGORITHM);

cipher.init(Cipher.DECRYPT_MODE, generateKey(secretKey));

}catch(NoSuchAlgorithmException e) {

e.printStackTrace();throw new Exception("NoSuchAlgorithmException", e);

}catch(NoSuchPaddingException e) {

e.printStackTrace();throw new Exception("NoSuchPaddingException", e);

}catch(InvalidKeyException e) {

e.printStackTrace();throw new Exception("InvalidKeyException", e);

}try{byte[] buf =cipher.doFinal(Base64Utils.decode(secretData.toCharArray()));return newString(buf);

}catch(IllegalBlockSizeException e) {

e.printStackTrace();throw new Exception("IllegalBlockSizeException", e);

}catch(BadPaddingException e) {

e.printStackTrace();throw new Exception("BadPaddingException", e);

}

}/*** 获得秘密密钥

*

*@paramsecretKey

*@return*@throwsNoSuchAlgorithmException

*@throwsInvalidKeySpecException

*@throwsInvalidKeyException*/

private staticSecretKey generateKey(String secretKey)throwsNoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException {

SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(DES_ALGORITHM);

DESKeySpec keySpec= newDESKeySpec(secretKey.getBytes());

keyFactory.generateSecret(keySpec);returnkeyFactory.generateSecret(keySpec);

}static private classBase64Utils {static private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();static private byte[] codes = new byte[256];static{for (int i = 0; i < 256; i++)

codes[i]= -1;for (int i = 'A'; i <= 'Z'; i++)

codes[i]= (byte) (i - 'A');for (int i = 'a'; i <= 'z'; i++)

codes[i]= (byte) (26 + i - 'a');for (int i = '0'; i <= '9'; i++)

codes[i]= (byte) (52 + i - '0');

codes['+'] = 62;

codes['/'] = 63;

}/*** 将原始数据编码为base64编码*/

static private String encode(byte[] data) {char[] out = new char[((data.length + 2) / 3) * 4];for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {boolean quad = false;boolean trip = false;int val = (0xFF & (int) data[i]);

val<<= 8;if ((i + 1)

val|= (0xFF & (int) data[i + 1]);

trip= true;

}

val<<= 8;if ((i + 2)

val|= (0xFF & (int) data[i + 2]);

quad= true;

}

out[index+ 3] = alphabet[(quad ? (val & 0x3F) : 64)];

val>>= 6;

out[index+ 2] = alphabet[(trip ? (val & 0x3F) : 64)];

val>>= 6;

out[index+ 1] = alphabet[val & 0x3F];

val>>= 6;

out[index+ 0] = alphabet[val & 0x3F];

}return newString(out);

}/*** 将base64编码的数据解码成原始数据*/

static private byte[] decode(char[] data) {int len = ((data.length + 3) / 4) * 3;if (data.length > 0 && data[data.length - 1] == '=')--len;if (data.length > 1 && data[data.length - 2] == '=')--len;byte[] out = new byte[len];int shift = 0;int accum = 0;int index = 0;for (int ix = 0; ix < data.length; ix++) {int value = codes[data[ix] & 0xFF];if (value >= 0) {

accum<<= 6;

shift+= 6;

accum|=value;if (shift >= 8) {

shift-= 8;

out[index++] = (byte) ((accum >> shift) & 0xff);

}

}

}if (index !=out.length)throw new Error("miscalculated data length!");returnout;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值