小编pal*_*ogt的帖子

Android 密钥库对称加密的最大明文大小?

我想使用Android 密钥库对大型(多 MB)数据文件进行对称 AES 加密。

我已经编写了演示代码,可以使用密钥库加密/解密多 KB 文件,但是当文件大小变得太大时,它就会开始下降。此最大大小因设备而异,范围可以从 ~80KB 到 ~1MB。在我测试过的每台 Android-M 设备(包括模拟器)上,似乎都有一个最大大小,超过该大小后加密就会失败。

当它失败时,它会默默地失败——但是密文大小通常比应有的小很多(当然不能解密)。

由于它在多个设备上如此普遍,要么我做错了什么(可能!),要么对密钥库中可以加密的内容存在某种未记录的限制。

我在 Github 上编写了一个演示应用程序来显示问题(这里,特别是这个文件)。您可以运行应用程序 GUI 来手动解决问题,或者运行仪器测试来解决问题。

任何有关此问题的帮助或文档指示将不胜感激!

作为参考,我正在生成这样的对称密钥:

KeyGenerator keyGenerator  = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
keyGenerator.init(
        new KeyGenParameterSpec.Builder(KEY_ALIAS, KeyProperties.PURPOSE_ENCRYPT|KeyProperties.PURPOSE_DECRYPT)
                .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
                .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                .build()
);
SecretKey key = keyGenerator.generateKey();

SecretKeyFactory factory = SecretKeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
KeyInfo keyInfo= (KeyInfo)factory.getKeySpec(key, KeyInfo.class);
logger.debug("isInsideSecureHardware: {}", keyInfo.isInsideSecureHardware());
Run Code Online (Sandbox Code Playgroud)

这样加密:

KeyStore keyStore= KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.SecretKeyEntry keyEntry= (KeyStore.SecretKeyEntry)keyStore.getEntry(KEY_ALIAS, null);

Cipher cipher= getCipher();
cipher.init(Cipher.ENCRYPT_MODE, keyEntry.getSecretKey());
GCMParameterSpec params= cipher.getParameters().getParameterSpec(GCMParameterSpec.class);

ByteArrayOutputStream byteStream= new …
Run Code Online (Sandbox Code Playgroud)

security android encryption-symmetric

5
推荐指数
1
解决办法
1795
查看次数

将STL与Alchemy一起使用

虽然Alchemy支持编译C++,但使用STL似乎很麻烦,主要是因为std :: string存在问题.奇怪的是Alchemy似乎正在使用GNU libstd ++ v3.4.6.很难相信std :: string在GNU的STL中被破坏了.

有没有人想出这个问题的解决方法?没有STL的C++就像没有水的鱼.

flash alchemy

4
推荐指数
1
解决办法
960
查看次数

在 Windows 中区分管道和文件

在 Unix 上,一切都是一个文件,因此您可以将文件 i/o 函数与管道、文件、套接字等一起使用。但在 windows 上,您使用的 api 取决于您拥有的 i/o HANDLE 的类型。

我的问题是:给定一个 HANDLE,你如何确定底层类型是什么?例如,我有一个 HANDLE,它要么是真实文件,要么是命名/匿名管道。我想知道是否可以在此 HANDLE 上调用 PeekNamedPipe。

windows file pipe handle

3
推荐指数
1
解决办法
1247
查看次数

将cmake更改为二进制目录

假设我有一个项目,我已经在.build目录中运行CMake:

project/
    .build/
    .src
Run Code Online (Sandbox Code Playgroud)

目前我必须这样做来运行构建:

cd .build
make
Run Code Online (Sandbox Code Playgroud)

我希望能够从我的项目的根目录运行make,也许是

make -f ./build/Makefile
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我得到这样的错误

make[1]: CMakeFiles/Makefile2: No such file or directory
make[1]: *** No rule to make target `CMakeFiles/Makefile2'.  Stop.
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

这是因为CMake生成的Makefile假定其工作目录与它所在的位置(.build)相同.

是否可以让CMake生成一个makefile,使makefile将工作目录更改为它所在的位置?

cmake

3
推荐指数
1
解决办法
3058
查看次数

Javascript库可以可靠地加载Java Applets?

Flash用户拥有精彩的SwfObject JavaScript库,它可以抽象浏览器差异,从而可靠地将swfs嵌入到他们的网页中.Java Applets是否有这样的JavaScript库?

javascript java applet

2
推荐指数
1
解决办法
1747
查看次数

清零整个char指针

我试图将整个char指针归零.如果我执行声明:

memset(myCharPointer, 0, sizeof(myCharPointer));

它只将前4个字节归零,因为这是char我系统上指针的大小.

那么如何确保数据完全设置为0?将其设置为NULL不会消除整个char指针.

c pointers char

2
推荐指数
2
解决办法
6275
查看次数