java中我有下面的一个加密方法,谁能给我提供一个解密方法呢?
发布网友
发布时间:2022-04-27 11:59
我来回答
共3个回答
热心网友
时间:2023-09-16 23:06
你只贴出来了加密用到的函数名,但函数体都没有,不知道你的代码是怎么加密的,怎么可能解密的了。。。如果你用的是eclipse。ctrl+左键点击进函数里,函数看实现。追问我这个是个方法,不需要类名了。你传一个string进去,就会返回一个string出来的。你随便把这个函数放在哪个类里都行
热心网友
时间:2023-09-16 23:07
BASE64Encoder和Decoder是非官方JDK里面的类。虽然可以在JDK里能找到并使用,但是在API里查不到。这两个可能是SUN公司内部人使用的,据我所知SUN开头的包里面的类都找不到相关文档,所以里面可能都是非官方的类。
热心网友
时间:2023-09-16 23:07
package util;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* @author Administrator
*
*/
public class Base64Test {
/**
* 生成密钥
*
* @param s
* 用于生成密钥的字符串,必须不少于8位
* @return 密钥
* @throws Exception
*/
private static SecretKey genKey(String s) throws Exception {
SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
DESKeySpec ks = new DESKeySpec(s.substring(0, 8).getBytes());
SecretKey kd = kf.generateSecret(ks);
return kd;
}
/**
* 加密
*
* @param key
* 用于生成密钥的字符串,必须不少于8位
* @param src
* 要加密的字符串
* @return 加密后的字符串
*/
public static String getEncryptedString(String key, String src) {
String base64 = "";
try {
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, genKey(key));
byte[] inputBytes = src.getBytes("UTF8");
byte[] outputBytes = cipher.doFinal(inputBytes);
BASE64Encoder encoder = new BASE64Encoder();
base64 = encoder.encode(outputBytes);
} catch (Exception e) {
base64 = e.getMessage();
}
return base64;
}
public static String entryPsw(String instr) {
byte[] cipherText = null;
sun.misc.BASE64Decoder base64d = new sun.misc.BASE64Decoder();
sun.misc.BASE64Encoder base64e = new sun.misc.BASE64Encoder();
String materialKey = "@Zer5QHeCe5r2zrDyk398$*0kjyWcuYt";
try {
byte[] mykey = base64d.decodeBuffer(materialKey);
if (mykey == null || mykey.length != 24) {
instr = null;
System.out.println("错误的验证密匙!");
} else {
byte[] plainText = instr.getBytes();
javax.crypto.spec.SecretKeySpec secrekeysp = new javax.crypto.spec.SecretKeySpec(mykey, "DESede");
java.security.Key key = (java.security.Key) secrekeysp;
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("DESede/ECB/PKCS5Padding", "SunJCE");
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key);
cipherText = cipher.doFinal(plainText);
}
} catch (Exception Ex) {
Ex.printStackTrace();
}
return base64e.encode(cipherText);
}
/**
* 解密
*
* @param key
* 用于生成密钥的字符串,必须不少于8位
* @param crypt
* 要解密的字符串
* @return 解密后的原文
*/
public static String getDecryptedString(String key, String crypt) {
String result = null;
try {
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, genKey(key));
BASE64Decoder decoder = new BASE64Decoder();
byte[] raw = decoder.decodeBuffer(crypt);
byte[] stringBytes = cipher.doFinal(raw);
result = new String(stringBytes, "UTF8");
} catch (Exception e) {
result = e.getMessage();
}
return result;
}
// 加解密实例
public static void main(String[] args) {
String key = "@Zer5QHeCe5r2zrDyk398$*0kjyWcuYt";
String src = "1234567";
System.out.println("src==" + src);
String encrypt = Base64Test.getEncryptedString(key, src);
System.out.println("encrypt==" + encrypt);
String testEncrypt = Base64Test.entryPsw(src);
System.out.println("encrypt==" + encrypt);
String decrypt = Base64Test.getDecryptedString(key, encrypt);
System.out.println("decrypt==" + decrypt);
}
}
打印结果:
src==1234567
encrypt==RfjlbP5kCv4=
encrypt==RfjlbP5kCv4=
decrypt==1234567
上述中有一个加解密的方法,来自百度,由于百度不能贴原址路径,在原址的方案上加上了你的方法