- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 16 字节长度的 AES key 。我想将 16 字节 key 加密 3 次。在第一次迭代中, key 大小更改为 16 到 256 字节。在下一次迭代中, key 大小更改为 256 到 689 字节。下一次迭代会引发屏幕截图中显示的异常。这是因为我的 RSA 算法不支持长度超过 256 字节的 key .RSA加密源码如下
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPublicKeySpec;
import java.sql.SQLException;
import javax.crypto.Cipher;
public class RSAKeyPack implements Serializable {
private static final long serialVersionUID = 2L;
PublicKey publicKey;
PrivateKey privateKey;
//KeyPairGenerator keyPairGenerator;
transient KeyPairGenerator keyPairGenerator;
private void getGenerator() throws NoSuchAlgorithmException {
if (keyPairGenerator == null) {
keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024); //1024 used for normal securities
KeyPair keyPair = keyPairGenerator.generateKeyPair();
publicKey = keyPair.getPublic();
privateKey = keyPair.getPrivate();
}
}
public RSAKeyPack()
{
try {
getGenerator();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*try
{
keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); //1024 used for normal securities
KeyPair keyPair = keyPairGenerator.generateKeyPair();
publicKey = keyPair.getPublic();
privateKey = keyPair.getPrivate();
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}*/
}
public PublicKey getPublicKey() {
return publicKey;
}
public void setPublicKey(PublicKey publicKey) {
this.publicKey = publicKey;
}
public PrivateKey getPrivateKey() {
return privateKey;
}
public void setPrivateKey(PrivateKey privateKey) {
this.privateKey = privateKey;
}
public BigInteger getParamModulus(PublicKey publickey) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException
{
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPublicKeySpec rsaPubKeySpec = keyFactory.getKeySpec(publicKey, RSAPublicKeySpec.class);
//RSAPrivateKeySpec rsaPrivKeySpec = keyFactory.getKeySpec(privateKey, RSAPrivateKeySpec.class);
System.out.println("PubKey Modulus : " + rsaPubKeySpec.getModulus());
return rsaPubKeySpec.getModulus();
}
public BigInteger getParamExponent(PublicKey publickey) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException
{
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPublicKeySpec rsaPubKeySpec = keyFactory.getKeySpec(publicKey, RSAPublicKeySpec.class);
//RSAPrivateKeySpec rsaPrivKeySpec = keyFactory.getKeySpec(privateKey, RSAPrivateKeySpec.class);
System.out.println("PubKey Modulus : " + rsaPubKeySpec.getPublicExponent());
return rsaPubKeySpec.getPublicExponent();
}
public static PublicKey readPublicKey(BigInteger modulus,BigInteger exponent) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException{
//Get Public Key
RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(modulus, exponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PublicKey publicKey = fact.generatePublic(rsaPublicKeySpec);
return publicKey;
}
public byte[] encryptData(byte[] data,PublicKey pubKey) throws IOException {
byte[] encryptedData = null;
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
System.out.println("data key length after encryption"+data.length);
encryptedData = cipher.doFinal(data);
System.out.println("data key length after encryption"+encryptedData.length);
} catch (Exception e) {
System.out.println("----------------ENCRYPTION ABANDONED!!!------------");
e.printStackTrace();
}
return (encryptedData);
}
public byte[] decryptData(byte[] data,PrivateKey privateKey) throws IOException {
byte[] descryptedData = null;
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
descryptedData = cipher.doFinal(data);
System.out.println("data key length after decryption "+data.length);
} catch (Exception e) {
e.printStackTrace();
}
return descryptedData ;
}
}
最佳答案
您可以使用对称 key 来加密和解密要传输的数据 (> 256)。 RSA 只能加密一定范围内的数据(例如 256 字节),这取决于 RSA key 长度。
这意味着,如果您想要传输大于 256 字节的任何内容,则必须先传输 < 256 字节的对称 key ,以便您可以拥有以下内容:
- Generate a symmetric key (< 256 bytes)
- Encrypt symmetric key with RSA
- Transfer encrypted symmetric key
- Decrypt symmetric key with RSA
- Encrypt data (> 256 bytes) with symmetric key
- Transfer encrypted data
- Decrypt encrypted data with symmetric key
或者(同时传输加密对称 key 和加密数据)
- Generate a symmetric key (< 256 bytes)
- Encrypt symmetric key with RSA
- Encrypt data (> 256 bytes) with symmetric key
- Transfer encrypted symmetric key & encrypted data
- Decrypt symmetric key with RSA
- Decrypt encrypted data with symmetric key
关于java - 如何解决javax.crypto.IllegalBlockSizeException : Data must not be longer than 256 bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531739/
我在一个网站上工作,我的一侧有一段文字不完全适合,所以部分内容不可见,因为网站的底部在那里结束。我想让它可以滚动,这样我就可以通过向下滚动查看完整内容。 #header { z-index: 1; p
已经有很多关于使用 pivot longer 和 pivot wider 以我需要的方式 reshape 数据的问题,但没有一个能得到正确的答案。过去,我成功地结合使用了更长的旋转轴和更宽的旋转轴来获
我为客户开发了一个应用程序并交给了他。 他刚刚安装并正在使用它...... 现在我的许可证已经过期,现在他突然说他的应用程序说: {my_app}“不再可用” [ 注意:到目前为止他没有重新安装应用程
我有一个 flutter 项目,我必须在其中获取 IOS 版本。当我在 Android Studio 中尝试 Flutter->Build IOS 时,收到以下错误消息。 “CFURLRequestS
我使用的是 Wildfly 10.0.x。我正在将 ejb2.1 迁移到 ejb3.2这是我的 ejb-jar.xml 文件 www.cedar.com - Collaborative Plann
昨天,我正在使用 Instagram API 进行一些测试。我想设计一个网页,在其中显示我们帐户中的最新照片(有些像社交动态)。今天,我收到此错误:“用于身份验证的客户端不再处于事件状态。”。 有人知
所以我的代码中有一行是这样的 WebElement docDate = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpa
嗨,伙计,我必须知道页面何时不再是当前页面。我认为我必须使用 Listener,我看到它存在: @Override public void onPageSelected(int
我有一个带有下拉菜单的简单导航栏,当用户将鼠标悬停在导航栏中其受尊重的链接上时,该菜单应该保留,但在用户将鼠标悬停在实际下拉菜单而非其链接上后,我无法使其保留。我试过创建一个 :hover在实际下拉列
我正在尝试测试我的应用程序如何处理被 Android ActivityManager 销毁(以及稍后由 Alarm 事件重新启动)。换句话说,我想强制消息: I/ActivityManager( 3
我在 UITextView 上有一个观察者来检测它的内容大小是否在变化: [_textView addObserver:self forKeyPath:@"contentSize"options:NS
我在 Android O 及更高版本中尝试运行我的 JobIntentService 时遇到以下问题,我很难重现该问题: Caused by java.lang.SecurityException:
我编写了一个 iOS 应用程序,我在其中非常成功地使用了 CGLayer。在研究从该应用程序中获得更多性能的方法时,我看到了这篇博文:http://iosptl.com/posts/cglayer-n
我有这个配置 包中的位置 com.x.record.persistence.impl 我有一个组件需要来自 com.x.record.persistence.repo 的存储
我的函数,用来计算给定的频率、频率、功率。我想对它进行矢量化,这样它就可以计算频率、FWHM和AMP:。计时:。我在lorz1和lorz2中的向量化哪里出了问题?他们不是应该比洛兹3更快吗?
我的函数计算洛伦兹给定频率,fwhm,amp。我想对它进行矢量化,以便它计算频率,fwhm和amps的列表:。计时:。我在lorz1和lorz2中的向量化哪里出了问题?他们不是应该比洛兹3更快吗?
我想 pivot_long() 下面数据集的多列避免硬编码。我看过一些类似的问题,但我仍然做不到。 宽数据: > head(data) ID IND_TEST_SCORE ARG_G1_A
我已经为此工作了大约一天半,并在网上搜索了大量博客和帮助文章。我在 SO 上发现了几个与此错误相关的问题,但我认为它们并不完全适用于我的情况(或者在某些情况下,不幸的是,我无法很好地理解它们以实现 :
我到处搜索这个,找不到它。 Apple 会恢复从销售中删除的应用内购买吗? 可以在 iTunesConnect -> Cleared for sale -> No. 上删除 IAP。 上个月我添加了一
我们在Android Studio 3.4.1中显示以下警告消息: WARNING: The following project options are deprecated and have bee
我是一名优秀的程序员,十分优秀!