- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 jks Keystore 文件加密和解密字符串。但是在解密时出现以下错误...
这是我的加密和解密类(class):
package com.Encrypt;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.UnrecoverableEntryException;
import java.security.UnrecoverableKeyException;
import java.security.KeyStore.PrivateKeyEntry;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import org.apache.commons.codec.binary.Base64;
public class Encrypt {
public String encyptCard(String card) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnrecoverableKeyException{
FileInputStream is = new FileInputStream("C:/Users/admin/Desktop/keystore/ksjksformat.jks");
String keystpassw = "9801461740";
String alias = "ksjksformat";
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(is,keystpassw.toCharArray() );
Certificate cert = ks.getCertificate(alias);
PublicKey publicKey = cert.getPublicKey();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] cipherData = cipher.doFinal(card.getBytes());
String cipherData1 = Base64.encodeBase64String(cipherData);
return cipherData1;
}
public String decrypte (String encCardNo) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableEntryException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
FileInputStream is = new FileInputStream("C:/Users/admin/Desktop/keystore/ksjksformat.jks");
String keystpassw = "9801461740";
String alias = "ksjksformat";
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(is,keystpassw.toCharArray() );
Key key = ks.getKey(alias, keystpassw.toCharArray());
Certificate cert = ks.getCertificate(alias);
PublicKey publicKey = cert.getPublicKey();
new KeyPair(publicKey, (PrivateKey) (key));
KeyStore.ProtectionParameter protParam = new KeyStore.PasswordProtection(keystpassw.toCharArray());
KeyStore.PrivateKeyEntry pkentry = (PrivateKeyEntry) ks.getEntry(alias, protParam);
PrivateKey myPrivateKey =pkentry.getPrivateKey();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, myPrivateKey);
byte[] cipherData = cipher.doFinal(encCardNo.getBytes());
String decrypted =Base64.decodeBase64(cipherData).toString();
return decrypted;
}
}
这是我调用这些方法的类:-
package com.Encrypt;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableEntryException;
import java.security.cert.CertificateException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
public class CryptoHelper {
public static void main(String[] argv) throws InvalidKeyException, KeyStoreException, NoSuchAlgorithmException, CertificateException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, IOException, UnrecoverableEntryException {
Encrypt obj = new Encrypt();
String answerEnc = obj.encyptCard("student");
System.out.println("encrypted data----------->"+answerEnc);
String Orginial_data = obj.decrypte(answerEnc);
System.out.println("Decrypted data-------->"+Orginial_data);
}
}
现在我收到这个错误:-
Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 256 bytes
at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at com.Encrypt.Encrypt.decrypte(Encrypt.java:56)
at com.Encrypt.CryptoHelper.main(CryptoHelper.java:17)
此错误是在行解密时
byte[] cipherData = cipher.doFinal(encCardNo.getBytes());
在 public String decrypte (String encCardNo)
方法中。请解释我该如何解决这个问题。
最佳答案
@Maarten Bodewes 答案是正确的,我们必须先解码再解密..
谢谢 @Maarten Bodewes
这是返回正确输出的解密方法的代码。
`
public String decrypte (String encCardNo) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableEntryException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
FileInputStream is = new FileInputStream("C:/Users/admin/Desktop/keystore/ksjksformat.jks");
String keystpassw = "9801461740";
String alias = "ksjksformat";
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(is,keystpassw.toCharArray() );
Key key = ks.getKey(alias, keystpassw.toCharArray());
Certificate cert = ks.getCertificate(alias);
PublicKey publicKey = cert.getPublicKey();
new KeyPair(publicKey, (PrivateKey) (key));
KeyStore.ProtectionParameter protParam = new KeyStore.PasswordProtection(keystpassw.toCharArray());
KeyStore.PrivateKeyEntry pkentry = (PrivateKeyEntry) ks.getEntry(alias, protParam);
PrivateKey myPrivateKey =pkentry.getPrivateKey();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, myPrivateKey);
byte[] decoded = Base64.decodeBase64(encCardNo);
byte[] cipherData = cipher.doFinal(decoded);
return new String(cipherData);
}`
关于java - 错误 javax.crypto.IllegalBlockSizeException : in Decryption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30539696/
我在使用以下代码时遇到了一些问题 - 我似乎收到了 IllegalBlocksizeException 并且不确定我在这里可能做错了什么?可以获得一些建议/指示吗? 谢谢 public cla
我在 JRE 1.6 上使用 AES 128 位加密。 我在尝试解密由 encrypt() 生成的字符串时不断收到此异常: 2014-11-19 14:40:10.831 28 javax.c
我编写了一个加密和解密函数。加密工作正常,但我总是在解密时遇到 IllegalBlockSizeException。 public static String aes_encrypt (String
我在处理解密方法时遇到了问题。加密产生了正确的输出,但是当我解密完全相同的加密字符串时(应该返回明文字符串),它不起作用。 import javax.crypto.Cipher; import jav
String key = "my_own_key_which_should_be_quite_long"; byte[] keyData = key.getBytes(); SecretKeySpec
我当前编写的解密算法如下, public String decrypt(String enc) throws Exception { Key key = k;
我的加密方法是: private static final String ALGORITHM = "AES/ECB/PKCS5Padding"; private static final byte[]
我在使用 Cipher 时观察到以下情况. 加密代码: Cipher aes = Cipher.getInstance("AES"); aes.init(Cipher.ENCRYPT_MODE, ge
我写了一些聊天内容,消息是类似的对象 {type="message",sender="userA",content="plaintextmessage",recipient="userB"} 发送到服
我正在使用 Java 的加密库并收到 IllegalBlockSizeException。 我目前正在尝试以 XML 文件格式提取数据库内容。在数据转储期间,我正在创建一个 list 文件,其中包含一
我已经使用 RSA 的公钥加密成功地加密了我的 AES key 。在使用 RSA 的私钥解密时,我得到: javax.crypto.IllegalBlockSizeException 适用于我的加密逻
我有一个硬编码 key ,我想在将字符串存储在 SharedPreferences 中之前使用它对其进行加密。这是我到目前为止的代码: public class TokenEncryptor {
我有一个硬编码 key ,我想在将字符串存储到 SharedPreferences 之前用它加密字符串。这是我到目前为止的代码: public class TokenEncryptor { p
我在java中使用AES/CBC/PKCS5Padding填充标准,我的 friend 在c#.NET中使用PKCS7标准如果我的 friend 使用 AES 加密数据并向我发送 key ,那么我就可
我目前正在开展一个夏季项目,该项目使用 AES 加密或解密文件。但是,当使用与加密对象相同的 key 时,我在尝试解密时收到非法 block 大小异常。我对密码学很陌生,但也是一位经验丰富的 Java
我正在尝试加密/解密文件中的文本,但收到以下错误: Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input l
我正在尝试使用 jks Keystore 文件加密和解密字符串。但是在解密时出现以下错误... 这是我的加密和解密类(class): package com.Encrypt; import java.
我使用DES 算法来加密/解密我的文本。它与拉丁文本完美搭配。 但是当我开始加密/解密西里尔文本时,解密的文本显示为 ?????? ???????? 在我的 TextField 表单和控制台中。我该如
RSA key 是使用以下代码生成的: RSAKeyGenParameterSpec rsaSpec = new RSAKeyGenParameterSpec(2048, RSAKeyGenParam
我使用 aes-256-cbc 进行数据加密/解密。 当使用 php 代码解密数据时,我没有收到错误。 PHP 代码如下: $key = 'd7df7d66bc110ba2e03a3a647ecd8c
我是一名优秀的程序员,十分优秀!