我找不到用于随机访问的 AES CTR 加密的任何工作示例。有人可以指导我如何在 CTR MODE 中使用计数器以及如何实现跳转到流中的特定位置吗?
默认流实现 ( CipherInputStream) 不会跳过流并且会破坏纯文本。
我正在尝试解密存储在 Android sdcard 上的加密视频文件。嵌入式 HTTP 文件服务器会动态解密它。一切正常,直到用户在视频中执行搜索:视频立即停止,因为它收到损坏的视频流。
我正在使用以下代码来初始化和加密/解密流(为了简单起见,我对密钥进行了硬编码。它不会在生产中进行硬编码)
ByteBuffer bb = ByteBuffer.allocate(16);
bb.put("1234567891230000".getBytes());
byte[] ivString = bb.array();
// INITIALISATION
String keyString = "1234567812345678";
IvParameterSpec iv = new IvParameterSpec(ivString);
SecretKeySpec keySpec = new SecretKeySpec(keyString.getBytes(), "AES");
// FOR ENCRYPTION
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(ivString));
Inputstream encrypted_is = new CipherInputStream(in, cipher);
// FOR DECRYPTION
cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(ivString));
Inputstream decrypted_is = new CipherInputStream(in, cipher);
Run Code Online (Sandbox Code Playgroud)