当前位置: 首页 > 知识库问答 >
问题:

Android AES/ECB/PKCS7PADDING生成密钥弹性城堡

呼延靖
2023-03-14

我想使用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();
}

我收到的错误没有这样的算法

共有1个答案

符渊
2023-03-14

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友好”键?现在如何生成密钥: