java secretkey_java根据特定密钥对字符串进行加解密

packagecom.test;importjava.io.IOException;importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;public classCryptoUtilTest {private final static String DES = "DES";private final static String ENCODE = "GBK";/*** Description 根据键值进行加密

*@paramdata 待加密数据

*@paramkey 密钥

*@return*@throwsException*/

public static String encrypt(String data, String key) throwsException {byte[] bt =encrypt(data.getBytes(ENCODE), key.getBytes(ENCODE));

String strs= newBASE64Encoder().encode(bt);returnstrs;

}/*** 根据键值进行解密

*@paramdata 待解密数据

*@paramkey 密钥

*@return*@throwsIOException

*@throwsException*/

public static String decrypt(String data, String key) throwsIOException,Exception {if (data == null)return null;

BASE64Decoder decoder= newBASE64Decoder();byte[] buf =decoder.decodeBuffer(data);byte[] bt =decrypt(buf, key.getBytes(ENCODE));return newString(bt, ENCODE);

}/*** Description 根据键值进行加密

*

*@paramdata

*@paramkey

* 加密键byte数组

*@return*@throwsException*/

private static byte[] encrypt(byte[] data, byte[] key) throwsException {//生成一个可信任的随机数源

SecureRandom sr = newSecureRandom();//从原始密钥数据创建DESKeySpec对象

DESKeySpec dks = newDESKeySpec(key);//创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象

SecretKeyFactory keyFactory =SecretKeyFactory.getInstance(DES);

SecretKey securekey=keyFactory.generateSecret(dks);//Cipher对象实际完成加密操作

Cipher cipher =Cipher.getInstance(DES);//用密钥初始化Cipher对象

cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);returncipher.doFinal(data);

}/*** Description 根据键值进行解密

*

*@paramdata

*@paramkey 加密键byte数组

*@return*@throwsException*/

private static byte[] decrypt(byte[] data, byte[] key) throwsException {//生成一个可信任的随机数源

SecureRandom sr = newSecureRandom();//从原始密钥数据创建DESKeySpec对象

DESKeySpec dks = newDESKeySpec(key);//创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象

SecretKeyFactory keyFactory =SecretKeyFactory.getInstance(DES);

SecretKey securekey=keyFactory.generateSecret(dks);//Cipher对象实际完成解密操作

Cipher cipher =Cipher.getInstance(DES);//用密钥初始化Cipher对象

cipher.init(Cipher.DECRYPT_MODE, securekey, sr);returncipher.doFinal(data);

}public static voidmain(String[] args){

String data= "12AU@_@is(m)8;1:'0js:\"]\"qASI08";

String key="qwerrewq"; //秘钥

System.out.println("加密前===>"+data);try{

String jiami=encrypt(data, key);

System.err.println("加密后:"+jiami );

String jiemi=decrypt(jiami, key);

System.err.println("解密后:"+jiemi);

}catch(Exception e) {

System.out.println("秘钥不正确"+"或"+"加密后的码被更改");

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,对字符串进行解密需要先进行加密,使用DES加密算法可以实现。Java中提供了DES加密算法的实现,可以使用javax.crypto包中的类来实现。下面是一个简单的示例代码: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; public class DESUtil { private static final String KEY = "12345678"; // 密钥 public static String encrypt(String data) throws Exception { DESKeySpec desKeySpec = new DESKeySpec(KEY.getBytes(StandardCharsets.UTF_8)); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(desKeySpec); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] bytes = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(bytes); } public static String decrypt(String data) throws Exception { DESKeySpec desKeySpec = new DESKeySpec(KEY.getBytes(StandardCharsets.UTF_8)); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(desKeySpec); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] bytes = Base64.getDecoder().decode(data); byte[] result = cipher.doFinal(bytes); return new String(result, StandardCharsets.UTF_8); } } ``` 使用示例: ```java public class Main { public static void main(String[] args) throws Exception { String data = "Hello, world!"; String encryptedData = DESUtil.encrypt(data); System.out.println("加密后的数据:" + encryptedData); String decryptedData = DESUtil.decrypt(encryptedData); System.out.println("解密后的数据:" + decryptedData); } } ``` 输出结果: ``` 加密后的数据:JvJjz5ZL8+Q= 解密后的数据:Hello, world! ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值