- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我继承了使用以下密码的 Android 代码:
ks = new SecretKeySpec(key, "AES");
ciph = Cipher.getInstance("AES");
由于只给出了“AES”,我不知道 key 大小、模式和填充是什么。我查看了 Bouncy CaSTLe* 文档,但找不到描述“AES”实例的位置。如果可以的话,我想使用更明确的实例描述(例如“AES/ECB/PCKS5Padding”)。
有谁知道这个实例的 key 大小、模式和填充是什么?
谢谢!
*我读到过 Android 使用 Bouncy CaSTLe 作为其默认提供程序,但我没有在任何官方网站上找到它,因此我可能会在这里做出无用的假设。
最佳答案
Java 默认为 "AES/ECB/PKCS5Padding"
,如 Oracle 文档所述。
If no mode or padding is specified, provider-specific default valuesfor the mode and padding scheme are used. For example, the SunJCEprovider uses ECB as the default mode, and PKCS5Padding as the defaultpadding scheme for DES, DES-EDE and Blowfish ciphers. This means thatin the case of the SunJCE provider:
Cipher c1 = Cipher.getInstance("DES/ECB/PKCS5Padding"); and
Cipher c1 = Cipher.getInstance("DES"); are equivalent statements.
参见 creating a Cipher object在 Oracle 文档中。
我刚刚自己使用调试器进行了检查。至少对于 Android 4.0,Android 似乎默认使用相同的加密和填充模式(正如预期的那样)。使用单个(00
值)字节的默认提供程序 的结果是一个填充的纯文本,其值是十六进制的 000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F
。这显然是 PKCS#5 填充,或者更准确地说是 PKCS#7 padding which is the same padding as PKCS#5用于 16 字节 block 密码。
原则上,任何提供者都可以具有与默认“SunJCE”提供者不同的默认值。但是,这会破坏假定使用 Oracle/OpenJDK 默认值的应用程序。
不要让你的同事程序员蒙在鼓里,强烈建议指定整个字符串,包括模式和填充,并且不依赖默认值用于加密算法(除外) SecureRandom
,通常不推荐指定算法)。
关于cryptography - Android中 "AES"密码的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13771186/
这个问题在这里已经有了答案: Towards the "true" definition of JAVA_HOME (5 个答案) 关闭 4 年前。 为什么 ActiveMQ 提供者需要设置 JAV
这个问题在这里已经有了答案: What is a lambda expression in C++11? (10 个答案) 关闭 8 年前。 这是来自 boosts asio 的一个例子。这是什么意
这个问题在这里已经有了答案: What does the double colon (::) mean in CSS? (3 个答案) 关闭 7 年前。 我经常看到这种用法。特别是伪类。“::”在
嗨,另一个愚蠢的简单问题。我注意到在Apple框架中的某些typedef中使用符号"<<"谁能告诉我这是什么意思?: enum { UIViewAutoresizingNone
someObject.$() 是什么意思? 我正在浏览 sapui5 工具包中的 tilecontainer-dbg 文件,发现了这个: var oDomRef = this.$(); or some
这个问题已经有答案了: How to interpret function parameters in software and language documentation? (4 个回答) 已关闭
我遇到过这个语法。任何人都可以解释一下 getArg1ListInfo:()=>(object.freeze(arg1)) 的含义 function foo (arg1,arg2) { let
对于子类,我有以下代码: class child1 : public parent { public: static parent* function1(void) { ret
这个问题在这里已经有了答案: What does "|=" mean? (pipe equal operator) (6 个答案) 关闭 1 年前。 我有一部分代码包含以下功能: void Keyb
以下在 C++ 中是什么意思? typedef PComplex RComplex [100]; 请注意,PComplex 是我代码中的用户定义类型。 谢谢 最佳答案 RComplex 是 PComp
在我的 Lisp 代码中,我有函数 (nfa-regex-compile),它创建一个包含初始状态、转换和最终状态的 cons 列表(表示自动机的节点)从作为参数给出的正则表达式开始。 在这种情况下,
以下文字摘自 Learning Spark 第 3 章 One issue to watch out for when passing functions is inadvertently seria
PHP 文档 block 中以下内容的含义是什么: #@+ zend框架代码中的一个例子: /**#@+ * @const string Version constant numbers */ c
由于 python 的一些版本控制问题,我必须使用自定义函数来比较 HMAC (SHA512)。为此,我找到了这个函数: def compare_digest(x, y): if not (i
取自this answer here : static const qi::rule node = '{' >> *node >> '}' | +~qi::char_("{}"); 请注意,声明了名称
我正在查看 chi 包的文档。我看到类似的东西: https://github.com/pressly/chi/blob/master/_examples/rest/main.go#L154 data
我想知道如果我采用值为 8 的 INT,这是否意味着我只能从 1 到 99999999 或从 1 到 4294967295 UNSIGNED? 最佳答案 文档似乎很清楚这一点: Numeric Typ
我想知道如果我采用值为 8 的 INT,这是否意味着我只能从 1 到 99999999 或从 1 到 4294967295 UNSIGNED? 最佳答案 文档似乎很清楚这一点: Numeric Typ
这个问题在这里已经有了答案: 关闭9年前。 Possible Duplicate: Does “/* (non-javadoc)” have a well-understood meaning? 以下
在 Prolog 代码中,可以使用“ headless ”Horn 子句将指令传递给编译器,这些子句与指向左侧的物质蕴涵 ':-' (⇐) 的左侧没有头部关系。例如,导入模块或声明 Unit Test
我是一名优秀的程序员,十分优秀!