【发布时间】:2014-07-07 18:33:22
【问题描述】:
我找不到任何适用于随机访问的 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);
【问题讨论】:
-
尝试发布一些代码。帮助你会更容易
-
“随机访问输入流”用词自相矛盾。它要么是随机访问,要么是流。
标签: java android encryption cryptography