我想使用AES/ECB/PKCS7PADDING
生成随机密钥,但java不支持PKCS7
填充,在我的算法中,我必须使用相同的填充,弹性城堡确实支持PKCS7PADDING
,但我无法理解如何使用它生成密钥
我的代码:
Security.addProvider(new BouncyCastleProvider());
private byte[] generateSessionKey() throws NoSuchAlgorithmException, NoSuchProviderException {
KeyGenerator kgen = KeyGenerator.getInstance("AES/ECB/PKCS7PADDING", "BC");
kgen.init(SYMMETRIC_KEY_SIZE);
SecretKey key = kgen.generateKey();
return key.getEncoded();
}
我收到的错误没有这样的算法
AES的密钥生成与填充无关。某些操作模式(例如ECB和CBC)需要填充。但密钥本身不依赖于模式或填充。所以您应该使用:
KeyGenerator kgen = KeyGenerator.getInstance("AES", "BC");
这无疑会奏效。
请勿使用PKCS#7填充,请将PKCS7Padding替换为PKCS5Padding。
请看这里以了解填充机制之间的差异,这里是Java中的差异。
我猜Android使用的是一个精简的Bouncy Castle提供程序(这是SpongyCastle闲逛的原因之一),这可以解释Android和Java SE提供程序之间的差异。
我已经创建了一个小程序来使用Bouncy Castle 1.47 API生成一个DSA/El Gamal PGP钥匙环。密钥生成过程非常顺利,没有一个错误。我使用ARRAMED输出将私钥和公钥导出到一个文件,当我尝试用GPG(确切地说是KGpg)导入生成的私钥时,我得到以下错误: 单击OK后,它告诉我只处理了1个密钥。看起来它只拿了DSA键,因为在屏幕上它显示为1024/0。 **编辑**我刚刚尝
我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id
我尝试使用“RSA/ECB/PKCS7Padding”进行加密。JCE不支持它。所以我下载了Bouncy Castle,但Bouncy Castle似乎也不支持这种转换。以下代码: 投掷 我做得对吗? 蒂亚。
我正在尝试用Java编写一个简单的密码管理器。我想用AES 256位加密用存储的密码加密文件。此外,我希望用户能够解密的文件与密码。当阅读其他在线帖子时,他们几乎都强调简单地使用密码作为密钥是不安全的,他们提到使用随机盐来增加安全性。但我不明白如何在生成密钥时使用随机盐。如果我从用户的密码和随机的salt创建密钥,那么当他们试图解密他们的文件时,我怎么知道salt是什么呢?这让我完全糊涂了。 目前
使用PEM证书,如 我的问题是,AFAIK,pemparser中没有密码的位置。 有人能给我一个如何将代码迁移到PEMParser版本的例子吗?
我的程序生成AES密钥,用rsa算法加密并发送到服务器。但是,当我从服务器获取它并解密时,一些字节被破坏并替换为序列,根据这个问题UTF-8编码和解码问题,我意识到问题是服务器(也解密密钥)将其存储为UTF-8字符串。有没有办法创建“UTF-8友好”键?现在如何生成密钥: