寻找 AES-CTR 加密的输入

2024-04-18

由于 CTR 模式下的 AES 非常适合随机访问,假设我有一个使用CipherOutputStream在 AES-CTR 模式下。下面的图书馆(不是我的)使用RandomAccessFile允许查找文件中的特定字节偏移量。

我最初的想法是使用CipherInputStream with a Cipher使用正确的参数初始化,但是的API http://docs.oracle.com/javase/7/docs/api/javax/crypto/CipherInputStream.html不寻求并声明不支持mark and reset.

我是否错过了 API 的一部分可以为我做到这一点,我是否应该研究 CTR 的 IV/块计数器的配置并使用自定义输入流重新创建它(这听起来像是瞄准目标的霰弹枪)self对我来说)或采取我错过的其他方法?


我最终查明了 IV 在 CTR 模式下是如何更新的。结果是对其处理的每个 AES 块执行简单的 +1。我按照以下思路实施阅读。

给定一个实现了read类似于方法,该方法将读取加密的字节序列中的下一个字节,并且需要支持在该序列和以下变量中查找:

  • BLOCK_SIZE:固定为 16(128 位,AES 块大小);
  • cipher: 的一个实例javax.crypto.Cipher,初始化为处理 AES;
  • delegate: a java.io.InputStream包装允许随机访问的加密资源;
  • input: a javax.crypto.CipherInputStream我们将提供读取服务(流将负责解密)。

The seek方法的实现如下:

void seek(long pos) {
    // calculate the block number that contains the byte we need to seek to
    long block = pos / BLOCK_SIZE;
    // allocate a 16-byte buffer
    ByteBuffer buffer = ByteBuffer.allocate(BLOCK_SIZE);
    // fill the first 12 bytes with the original IV (the iv minus the actual counter value)
    buffer.put(cipher.getIV(), 0, BLOCK_SIZE - 4);
    // set the counter of the IV to the calculated block index + 1 (counter starts at 1)
    buffer.putInt(block + 1);
    IvParameterSpec iv = new IvParameterSpec(buffer.array());
    // re-init the Cipher instance with the new IV
    cipher.init(Cipher.ENCRYPT_MODE, key, iv);
    // seek the delegate wrapper (like seek() in a RandomAccessFile and 
    // recreate the delegate stream to read from the new location)
    // recreate the input stream we're serving reads from
    input = new CipherInputStream(delegate, cipher);
    // next read will be at the block boundary, need to skip some bytes to arrive at pos
    int toSkip = (int) (pos % BLOCK_SIZE);
    byte[] garbage = new byte[toSkip];
    // read bytes into a garbage array for as long as we need (should be max BLOCK_SIZE
    // bytes
    int skipped = input.read(garbage, 0, toSkip);
    while (skipped < toSkip) {
        skipped += input.read(garbage, 0, toSkip - skipped);
    }

    // at this point, the CipherStream is positioned at pos, next read will serve the 
    // plain byte at pos
}

请注意,此处省略了寻找委托资源,因为这取决于委托下方的内容InputStream。另请注意,初始 IV 需要从计数器 1(最后 4 个字节)开始。

单元测试表明这种方法是有效的(性能基准将在未来的某个时候进行:))。

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

寻找 AES-CTR 加密的输入 的相关文章

  • 在 spring-boot 中设置 base-href 和 context-path - Angular 6 应用程序

    我正在构建一个 Web 应用程序 其中 UI 客户端组件是使用 Angular 6 构建的 后端 服务器端 位于 Spring boot 上 申请预计可在 http localhost 8080 FUtility 我通过在 appmodul
  • 在 portlet 中设置 SearchContainer 以使用 EL 和 JSTL 在 JSP 中使用它

    我正在尝试使用SearchContainer在我的liferay应用程序中 目前我必须使用 JSP Scriplets 来设置results in
  • Java Swing 应用程序消息对话框帮助

    我正在开发 Java Swing 应用程序 我需要创建一个如图所示的对话框 我不知道这个的名字 我无法解释 所以我附上一张照片 请告诉我这叫什么以及如何在我的 GUI 应用程序中创建它 给猫剥皮的方法不止一种 public final cl
  • 获取 Wi-Fi 配置文件信息

    我使用的是 Windows 8 1 它没有工具 带有 GUI 来管理 wifi 网络配置文件 所以我正在写一篇对我有帮助的文章 我做了一些谷歌搜索并发现托管 Wifi API https managedwifi codeplex com 并
  • Java EE 6 和单例

    谁能解释一下在 Java EE 6 应用程序中实现 Singleton 的完整过程 我假设我不应该以声明静态变量的典型方式创建单例 而应该使用 Singleton注解 我必须这样做吗 难道只是声明一下的情况 Singleton就是这样 我还
  • 检查从 arrayadapter 获取的复选框

    我有标题清单 CheckBox 我想控制默认检查哪一个 所以我试图获得正确的视图并检查它 但由于某种原因它不起作用 知道为什么吗 form checkbox item xml
  • Hibernate 每个子类一个表继承策略的效率

    我正在考虑 Hibernate 管理的类层次结构的表布局 当然 每个子类表技术在我看来是一般意义上最合适的 然而 通过逻辑思考 我对其性能有些担忧 尤其是随着子类数量的扩展 举一个非常简短 且经典 的示例 假设您有以下类 public ab
  • 解析 (yyyy-MM-dd) 格式的字符串日期

    我有一个 2013 09 18 形式的字符串 我想将其转换为 java util Date 我正在做这个 SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd Date converted
  • 有没有办法让Maven自动下载快照版本?

    所以我有一个项目依赖于另一个项目的快照版本 依赖关系是
  • Android:TelephonyManager 类

    我不明白为什么 API 文档中这么写TelephonyManager类是public 但是当我尝试创建一个实例时 它说它不是公共类 并且无法从包中访问 我看到它也说使用Context getSystemService Context TEL
  • WSDL2Java 抛出无法找到主类:org.apache.axis.wsdl.WSDL2Java

    我正在尝试从远程 Web 服务创建 java 文件 我下载了axis 1 4 将lib文件夹复制到c data axis lib其中包含这些文件 axis jar 轴 ant jar commons discovery 0 2 jar co
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Eclipse 无法识别 persistence.xml 的内容

    我在 eclipse 中收到以下错误 persistence xml 文件没有可识别的内容 我的 persistence xml 文件在我的应用程序中工作得很好 但 eclipse 一直给我这个错误 我在移动文件并使用 m2eclipse
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • 我可以使用 Selenium Webdriver 测试元素的顺序吗?

    有一个表单 其中有 3 个字段 具有 3 个不同的 ID fieldset div div fieldset
  • 如何在 QueryDSL 中选择文字

    我目前正在开发一个使用 queryDSL 和 hibernate 的项目 其中它需要一个选择文字 按照发布的示例here https stackoverflow com questions 18691317 querydsl how to
  • python 和 android 中通过 AES 算法加密和解密

    我有用于 AES 加密的 python 和 android 代码 当我在android中加密文本时 它在python上成功解密 但无法在android端解密 有人有想法吗 Python代码 import base64 import hash
  • IntelliJ - 无效源版本:17

    我已经在 IntelliJ 中使用 Gradle 创建了一个使用 Java 17 的新 Java 项目 运行我的应用程序时出现错误Cause error invalid source release 17 我的设置 我已经安装了openjd
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • 按钮悬停和按下效果 CSS Javafx

    我是 CSS 新手 为按钮定义了以下 CSS 样式 其中id并且应用了自定义样式 但不应用悬停和按下效果 bevel grey fx background color linear gradient f2f2f2 d6d6d6 linear

随机推荐

  • 如何从另一个控制器重定向到 Index?

    我一直在寻找某种方法来重定向到Index从另一个控制器查看 public ActionResult Index ApplicationController viewModel new ApplicationController return
  • 我何时以及为什么应该使用 attr.Factory?

    我应该何时以及为何使用attr ib default attr Factory list over attr ib default 来自docs http attrs readthedocs io en stable api html我看到
  • 如何使用 JQuery 和 Ajax 验证表单字段并将表单数据发布到服务器?

    我正在尝试验证表单字段 例如姓名 不得为空 Email id 必须有效 手机 必须有效 填写所有信息后 我必须将此信息发送到服务器 并将响应重定向到不同的页面 这里什么都不起作用 我的表单 html
  • 如何在 OpenCV 中获取单独的轮廓(并填充它们)?

    我试图分离图像的轮廓 为了找到均匀的区域 所以我应用了 cvCanny 然后应用了 cvFindContours 然后每次按下一个键时 我使用以下代码绘制 1 个轮廓 for contours2 0 contours2 contours2
  • “转到实现”以“符号没有实现”结尾

    当右键单击时 例如Visual Studio 中的方法并选择Go To Implementation它告诉我 该符号没有实现 我尝试过 services AddDbContext
  • swift 2.1 alamofire超时方法

    我对 alamofire 超时方法有疑问 首先 我的英语可能不够好 无法让你们理解我所说的 但我会厌倦解释我的问题 在我的项目中 我使用了 alamofire 出于某种原因 我需要确保我的应用程序在连接不良的区域工作 所以我正在考虑使用超时
  • Node-sass 是 React 项目的开发依赖还是生产依赖?

    在各种 React 文档中 我看到它被添加为产品依赖项 但我不明白为什么 难道它不应该是一个 devDependecy 吗 因为 SASS 只在开发过程中被编译 而当推送到 prod 时 你实际上推送的是编译后的 CSS 文件 由于需要进行
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • .NET 列表.Distinct

    我正在使用 NET 3 5 为什么我仍然收到 不包含 不同 的定义 用这个代码 using System Collections Generic code List
  • R:进入“内部”环境

    给定一个environment object e gt e
  • 使用 highcharts 将 mysql 数据库中的动态数据添加到折线图

    我想使用 ajax 或 json 将数据点添加到我的折线图中 现在我必须重新加载整个网页才能在图表上显示我的新数据 但我想通过添加如下链接的点来显示实时数据 jsfiddle net gh get jquery 1 9 1 highslid
  • 完全离线工作的领域(从不在线)

    我试图了解 mongoDB 的每个元素是如何工作的 但我真的很困惑如何处理离线 即将 https realm io https realm io 我读到了这个 Realm 移动数据库是 Core Data 和 SQLite 的开源 开发人员
  • 自动完成搜索,即使是一个字符 Android

    我在用AutoComplete小部件 它适用于两个字符搜索 但不适用于一个字符 即使用户只输入一个字符 我也想自动完成工作 例如 当我输入 1 时 它应该显示所有以 1 开头的列表 现在它显示 2 个字符的建议列表 例如 12 Code z
  • CYK算法是如何工作的?

    我必须检查一个字符串是否可以从乔姆斯基范式的给定上下文中派生出来 我正在使用 C 有非常好的伪代码 http en wikipedia org wiki CYK algorithm As pseudocode关于 CYK 算法的维基百科文章
  • 在 safari 中显示本地磁盘的图像

    我的页面中有这个标签 在 localhost 3000 上运行 img src width 400 height 200 图像确实存在 但未显示 如果我将 src 属性中的路径放入地址栏 则图像已加载 但它在 img 标记中不起作用 甚至在
  • Android Facebook 集成与无效密钥哈希

    在我的一个应用程序中 我需要从 Facebook 获取数据 我正在这样做 我创造了app ID 它登录成功 但是注销后 我登录 然后它给我 我做错了什么 我正在使用脸书软件开发工具包 我已经在手机上安装了 Facebook 它在模拟器中运行
  • 如何使用 re.sub 搜索和替换精确的字符和数字?

    我正在尝试在 python 中使用正则表达式来搜索 p1 in p1 p2 p3 p10 p11 p12 并将其替换为 hi 下面是我的Python代码 import re x p1 p2 p3 p10 p11 p12 data p1 y
  • 如何使用 MassTransit 测试工具通过构造函数依赖注入来测试 Consumer?

    我有一些消息使用者通过构造函数获取依赖项 我想在单元测试中涵盖它们 MassTransit 的测试工具是否提供了一种使用构造函数参数注册消费者的方法 创建消费者测试工具时 您可以指定工厂方法或消费者工厂 harness Consumer
  • 单击的单选按钮值显示为未定义

    对于被单击的单选按钮的值 结果显示为未定义 document ready function input radio change function checkResult this function checkResult el var c
  • 寻找 AES-CTR 加密的输入

    由于 CTR 模式下的 AES 非常适合随机访问 假设我有一个使用CipherOutputStream在 AES CTR 模式下 下面的图书馆 不是我的 使用RandomAccessFile允许查找文件中的特定字节偏移量 我最初的想法是使用