- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 key 保存在 XML 文件中,以便稍后解密加密字符串,该软件可以在“Encrypt()”方法中加密并返回我,但在尝试使用“Decrypt( )”方法
代码
private static Cipher ecipher;
private static Cipher dcipher;
public static String[] encrypt(String str) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException {
String Key, res;
SecretKey key;
String[] Return = new String[2];
key = KeyGenerator.getInstance("DES").generateKey();
ecipher = Cipher.getInstance("DES");
ecipher.init(Cipher.ENCRYPT_MODE, key);
byte[] utf8 = str.getBytes("UTF8");
byte[] enc = ecipher.doFinal(utf8);
enc = BASE64EncoderStream.encode(enc);
res = new String(enc);
//Returning values 0 = Encrypted String 1 = Key For Storage in XML
Return[0] = res;
byte[] keyBytes = key.getEncoded();
Key = new String(keyBytes,"UTF8");
Return[1] = Key;
return Return;
}
public static String decrypt(String str, String Key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, UnsupportedEncodingException, BadPaddingException {
SecretKey key = new SecretKeySpec(Key.getBytes("UTF8"), "DES");
dcipher = Cipher.getInstance("DES");
dcipher.init(Cipher.DECRYPT_MODE, key);
byte[] dec = BASE64DecoderStream.decode(str.getBytes());
byte[] utf8 = dcipher.doFinal(dec);
return new String(utf8, "UTF8");
}
控制台返回:
run:
Encryped String : EB6uhzsBl08=
Key : �g�uX8p
Sep 07, 2014 6:35:17 PM Software.Software main
SEVERE: null
java.security.InvalidKeyException: Invalid key length: 12 bytes
at com.sun.crypto.provider.DESCipher.engineGetKeySize(DESCipher.java:373)
at javax.crypto.Cipher.passCryptoPermCheck(Cipher.java:1062)
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1020)
at javax.crypto.Cipher.implInit(Cipher.java:796)
at javax.crypto.Cipher.chooseProvider(Cipher.java:859)
at javax.crypto.Cipher.init(Cipher.java:1229)
at javax.crypto.Cipher.init(Cipher.java:1166)
at Software.Encryption.decrypt(Encryption.java:51)
at Software.Software.main(main.java:30)
BUILD SUCCESSFUL (total time: 1 second)
最佳答案
您必须以 Base64 形式对 key 进行编码
public static String[] encrypt(String str) throws NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException,
UnsupportedEncodingException, IllegalBlockSizeException,
BadPaddingException {
String Key, res;
SecretKey key;
String[] Return = new String[2];
key = KeyGenerator.getInstance("DES").generateKey();
ecipher = Cipher.getInstance("DES");
ecipher.init(Cipher.ENCRYPT_MODE, key);
byte[] utf8 = str.getBytes("UTF8");
byte[] enc = ecipher.doFinal(utf8);
enc = BASE64EncoderStream.encode(enc);
res = new String(enc);
// Returning values 0 = Encrypted String 1 = Key For Storage in XML
Return[0] = res;
byte[] keyBytes = key.getEncoded();
Key = new String(BASE64EncoderStream.encode(keyBytes), "UTF8");
Return[1] = Key;
return Return;
}
public static String decrypt(String str, String Key)
throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException,
UnsupportedEncodingException, BadPaddingException {
SecretKey key = new SecretKeySpec(BASE64DecoderStream.decode(Key.getBytes("UTF8")), "DES");
dcipher = Cipher.getInstance("DES");
dcipher.init(Cipher.DECRYPT_MODE, key);
byte[] dec = BASE64DecoderStream.decode(str.getBytes());
byte[] utf8 = dcipher.doFinal(dec);
return new String(utf8, "UTF8");
}
关于java - 无法成功将 SecretKey 保存为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25715001/
我使用以下代码将 key 转换为字节 SecretKey key = KeyGenerator.getInstance("DES").generateKey(); byte[] bkey=key.ge
我需要在 Java 中生成一个随机的 SecretKey,我将能够在未来的某个时候重新生成它。这个想法是这个 key 对于创建它的机器是唯一的并且不存储在任何地方。我正在尝试这样的事情: KeyGen
我希望能够将 DES SecretKey 保存到文件中,以便您稍后可以导入和使用它。看了好几条路线,好像都有些啰嗦,有没有简洁明了的方法呢? 最佳答案 在 Java 中将 SecretKey 保存到文
我想把String转成secretKey public void generateCode(String keyStr){ KeyGenerator kgen = KeyGenerator.getIn
我遇到了一个问题,当用户向他们的 Android 设备添加新指纹时,我想使 SecretKey 无效。我可以生成 key ,毫无问题地拉出生物识别提示。当我添加新指纹时, key 不会引发异常..它仍
我正在尝试将 key 保存在 XML 文件中,以便稍后解密加密字符串,该软件可以在“Encrypt()”方法中加密并返回我,但在尝试使用“Decrypt( )”方法 代码 private stati
我目前使用 DES 作为加密/解密数据的实践方法(我知道这不是行业惯例!)并且我在解密时遇到错误(这里是输出): java.security.InvalidKeyException: Paramete
我试图用我的公钥加密一个secretKey,然后用私钥在其他地方解密它。我可以很好地加密和解密,但是当我这样做时,我得到了一个完全不同的 key 。 这是创建公钥/私钥对的代码 public stat
我试图简单地加密一些文本,将其保存在文本文件中,然后加载/解密它。 使用Java网站上的教程,我一直使用的代码: public class MainClass { public static vo
我正在编写一个函数,使用 SecretKeyFactory 根据密码生成 key (字节)。我想在不再需要时销毁 SecretKey 实例,但它会引发异常。 try { byte[] salt
我正在尝试在应用程序中的任何地方拥有 secret (字符串),保存为!所以我想出了这个想法,使用keyStore来存储 key ,只用它来加密和解密我的 secret 。以下是我如何保存(加密)我的
在EC2上运行时,accesskey和secret key可以通过curl命令获取 curl http://169.254.169.254/latest/meta-data/iam/security-
我想问你,将 LinkedIn ConsumerKey 和 ConsumerSecret 像常量一样保存在我的代码中是否安全? 如果不安全,使用 LinkedIn 进行身份验证的正确方法是什么? 最佳
我执行以下操作来根据 KeyStore 中的用户密码存储 SecretKey: // load KeyStore static byte[] salt = // for learning purpos
作为加密和保存数据的一部分,我们使用 AES 算法和 openssl 生成了 key 。 openssl enc -aes-256-cbc -P -nosalt Openssl 已生成 KEY 和 I
我正在尝试在 C# 应用程序中复制 Java 库中的加密逻辑。 Java 包含两种方法,我已设法在 C# 中复制它们。对于任何数据集,我在每个程序中都得到相同的结果。 createKey(byte d
我最近开始在设备中看到此错误。 java.security.InvalidKeyException: Only SecretKey is supported at com.androi
我目前正在研究 Java 中的 key 处理类,特别是使用 KeyStore。我正在尝试使用 AES 实例生成一个 SecretKey,然后使用 setEntry() 方法将它放在 KeyStore
我有一个使用 S3 存储桶的 Spring Boot 应用程序。根据亚马逊(https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/ja
我目前正在 Java 中开发一个 key 处理类,特别是使用 KeyStore。我正在尝试使用 AES 实例生成 SecretKey,然后使用 setEntry() 方法将其放入 KeyStore 中
我是一名优秀的程序员,十分优秀!