Bouncy Castle 在 CBC 模式下使用 AES 进行基于密码的加密

2024-03-14

我最近遇到了一段在 CBC 模式下使用 BouncyCastle 的 PBE 和 AES 的代码(“PBEWithSHA1And256BitAES-CBC-BC”)。

public static final String ALGORITHM = "PBEWithSHA1And256BitAES-CBC-BC";

public static byte[] encrypt(final byte[] key, final byte[] salt, final byte[] plainText) throws CryptoException {
    try {
        // Create the encryption key
        final SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM, "BC");
        final PBEKeySpec keySpec = new PBEKeySpec(new String(key).toCharArray());
        final SecretKey secretKey = keyFactory.generateSecret(keySpec);

        // Encrypt the plain text
        final PBEParameterSpec cipherSpec = new PBEParameterSpec(salt, ITERATIONS);
        final Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, cipherSpec);
        final byte[] encryptedBytes = cipher.doFinal(plainText);

        return encryptedBytes;

    } catch (final Throwable t) {
        throw new CryptoException(t.toString());
    }
}

正如您所看到的,此代码没有指定正确的 IV 来执行 AES CBC 加密。

我不知道如何指定盐、迭代次数和要使用的 IV到密码。

我该怎么做呢?

谢谢。


可以使用jasypt(java简单加密)PBEWithSHA1And256BitAES-CBC-BC

示例代码如下所示:

StandardPBEStringEncryptor myFirstEncryptor = new StandardPBEStringEncryptor();                                                                                                      
myFirstEncryptor.setProvider(new BouncyCastleProvider());                                                                                                    

myFirstEncryptor.setAlgorithm("PBEWITHSHA256AND256BITAES-CBC-BC");                                                                                         




FixedStringSaltGenerator generator = new FixedStringSaltGenerator();                                                                                         
generator.setSalt("justAnotherSaltforGX");
//myFirstEncryptor.setSaltGenerator(new ZeroSaltGenerator());                                                                                                    

myFirstEncryptor.setSaltGenerator(generator);                                                                                                                    

myFirstEncryptor.setKeyObtentionIterations(1);                                                                                                               
String myPassword="creditCard";                                                                                                                              
myFirstEncryptor.setPassword(myPassword);                                                                                                                    


String myText="Redeem Gacha ";                                                                                                         
String myFirstEncryptedText = myFirstEncryptor.encrypt(myText);                                                                                              

System.out.println("myFirstEncryptedText AES encrypt=="+myFirstEncryptedText);                                                                               

System.out.println("myFirstEncryptedText AES decrypt =="+myFirstEncryptor.decrypt(myFirstEncryptedText));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bouncy Castle 在 CBC 模式下使用 AES 进行基于密码的加密 的相关文章

随机推荐

  • 以编程方式触发时突出显示 NSStatusItem

    我有一个NSStatusItem带有我用全局热键触发的附加菜单 如果我单击菜单项 我会像平常一样突出显示 如果我使用热键 则不会触发突出显示 有谁知道触发亮点的方法吗 我尝试过覆盖视图并自己绘制它drawRect但如果有更好的方法 我很想听
  • 使用 home-brew 安装 phpmyadmin

    我尝试使用 home brew 安装和配置 phpmyadmin 为了安装我使用了命令brew install phpmyadmin这是终端中打印的消息的摘要 gt Summary usr local Cellar php71 7 1 0
  • 在故事板中设置的 UITableViewCell 的恢复 ID 和标识符之间有什么区别

    当我拖动一个UITableViewCell到 tableView 中storyboard 我发现检查器中有两个ID需要设置 一个是在身份检查器中 Restoration ID 另一个在属性检查器 身份 中 他们之间有什么区别 恢复 ID 用
  • FlagsAttribute 有什么用?

    下面的代码有什么区别 no Flags Public Enum MyEnum Monday 1 Tuesday 2 Wednesday 4 Thursday 8 End Enum and
  • 从 xhr 对象获取请求 url

    有没有办法从 xhr 对象中提取请求 url 我可以通过通道属性看到 firebug 中的 url 但你无法使用 javascript 查询它 使用以下 hack 不需要包装器 var xhrProto XMLHttpRequest pro
  • Microsoft Graph 身份验证

    我正在用 Python 构建一个应用程序 它可以从 Azure AD 检索数据 此数据可能需要应用程序权限或委派权限 我成功检索了仅需要应用程序权限的数据 但是 为了检索需要委托权限的数据 我尝试使用 OAuth2 是否可以使用 OAuth
  • 如何在 Java 中将 2010-12-15T16:26:49.841-08:00 转换为 GregorianCalendar? [复制]

    这个问题在这里已经有答案了 我有一个字符串日期 2010 12 15T16 26 49 841 08 00 我需要将其转换为Java中的GregorianCalendar 你怎么做到这一点 Jesper 的回答的解决方案 使用joda时间的
  • 如何在 Docker Python 镜像中安装 GDAL 库?

    我正在为我的 django 项目使用 python3 7 slim buster docker 映像 现在我想使用django的Geo功能 但看来我必须安装GDAL 因此 我执行 RUN apt get install gdal 并引发异常
  • JPA 是否支持映射到 sql 视图?

    我目前正在使用 Eclipselink 但我知道现在大多数 JPA 实现已经相当标准化 是否有一种将 JPA 实体映射到视图的本机方法 我不想插入 更新 但问题实际上是如何处理 Id 注释 JPA 世界中的每个实体都必须有一个 ID 字段
  • java中本地对象的内存管理

    如果我在类中有一个方法并且我在该方法中创建一个对象 那么该对象会被销毁并释放分配给它的内存吗 该方法完成后 eg public void drawFigure Paint paint new Paint paint setSomePrope
  • Vue-test-utils 包装器未定义

    我在 Jest 中有以下组件的测试套件 我已经成功地为其他几个遵循类似结构的组件编写了单元测试 import createLocalVue mount from vue test utils import Vuex from vuex im
  • python 基于部分字符串匹配合并两个 pandas 数据框

    我是 Python 新手 在连接两个 pandas 数据框时遇到很多麻烦 因为合并应该基于部分字符串匹配 进一步来说 我有一个名为的数据框df看起来像这样 writtenAt 2015 01 01T18 31 01 00 00 conten
  • Oracle sql 按当天对工作日进行排序

    我试图根据顺序对日期进行排序 周六 周日 周一 周二 周三 周四 周五 我正在尝试使用案例 select day CASE day WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 3 THEN 3 WHEN 4 THEN
  • Netsuite 脚本 beforeLoad 记录未被修改

    我试图在用户打开采购订单时修改它 这似乎是一个非常简单的例子 但似乎不起作用 在 GUI 中我没有看到 测试 备忘录 在脚本调试中 备注字段为空 由于调试 我知道脚本正在运行 Update Drop Ship PO with route I
  • Express Checkout 错误消息:“安全标头无效”

    我正在实施快速结帐在贝宝 前两步我没有问题SetExpressCheckout and GetExpressCheckout 但是当我使用DoExpressCheckout 我遇到错误 安全标头无效 API 凭证是相同的 我已经通过更改来修
  • ec2 每次启动时运行脚本

    我在这里关注了一些帖子 尝试在每次启动后 而不仅仅是第一次启动 在我的 ec2 实例上运行 python 或 shell 脚本 我已经尝试过 脚本用户 始终 到 etc cloud cloud cfg 文件 将脚本添加到 scripts p
  • 如何在纯 PHP 中执行 HTTP 重定向后获取最终 URL?

    我想做的是找出重定向后的最后 最终 URL 是什么 我不想使用 cURL 我想坚持使用纯 PHP 流包装器 现在我有一个网址 比方说http 域名 test http domain test 我使用 get headers 从该页面获取特定
  • 如何将变量传递给布局?

    我的应用程序布局有两个版本 它们仅在几行中有所不同 考虑以下示例 html head a lot of code here body some more code here if defined flag and flag true var
  • iOS 7.1:当应用程序在后台时获取核心运动数据(加速计、陀螺仪)

    我想知道当应用程序处于后台模式时如何继续接收运动传感器值 我意识到那里已经有几个帖子了 例如 我尝试过iPhone 上的 Nike GPS 如何在后台接收加速度计更新 https stackoverflow com questions 87
  • Bouncy Castle 在 CBC 模式下使用 AES 进行基于密码的加密

    我最近遇到了一段在 CBC 模式下使用 BouncyCastle 的 PBE 和 AES 的代码 PBEWithSHA1And256BitAES CBC BC public static final String ALGORITHM PBE