我找不到任何地方是否每个Java平台实现都必须附带AES实现.
我想在Android上使用以下代码:
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); decrypted = cipher.doFinal(encryptedData);
但是,我无法确定是否可以保证实现“ AES”(例如,根据此报价,可以保证在每个Java平台上都可以实现“ SHA-1”算法:
“必须支持Java平台的所有实现,以支持以下标准MessageDigest算法:
MD5
SHA-1
SHA-256“
(字体:http://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html).
有人知道Java是否可以保证AES实现(甚至是AndroID,我想在哪里使用它)?
解决方法:
对于Java,请查看JCA标准名称的Cipher部分.它列出了AES作为标准加密算法之一.还要查看同一文档的Implementation部分.其中列出了所有Java运行时所需的最小加密转换.该列表包括:
> AES / CBC /无填充(128)
> AES / CBC / PKCS5填充(128)
> AES / ECB /无填充(128)
> AES / ECB / PKCS5填充(128)
因此,可以保证在CBC或ECB模式下使用PKCS5或不使用填充都支持AES.保证支持的唯一密钥大小是128位.
现在,从技术上讲,AndroID不是Java运行时,因此不受JCA要求的约束.但是,很可能以一种或另一种方式支持AES,因为Android’s API documentation中包含了它作为示例.要获取可用加密转换的完整列表,请使用以下代码:
public voID ListSupportedAlgorithms() {String result = "";// get all the provIDersProvIDer[] provIDers = Security.getProvIDers();for (int p = 0; p < provIDers.length; p++) { // get all service types for a specific provIDer Set<Object> ks = provIDers[p].keySet(); Set<String> servicetypes = new TreeSet<String>(); for (Iterator<Object> it = ks.iterator(); it.hasNext();) { String k = it.next().toString(); k = k.split(" ")[0]; if (k.startsWith("Alg.Alias.")) k = k.substring(10); servicetypes.add(k.substring(0, k.indexOf('.'))); } // get all algorithms for a specific service type int s = 1; for (Iterator<String> its = servicetypes.iterator(); its.hasNext();) { String stype = its.next(); Set<String> algorithms = new TreeSet<String>(); for (Iterator<Object> it = ks.iterator(); it.hasNext();) { String k = it.next().toString(); k = k.split(" ")[0]; if (k.startsWith(stype + ".")) algorithms.add(k.substring(stype.length() + 1)); else if (k.startsWith("Alg.Alias." + stype +".")) algorithms.add(k.substring(stype.length() + 11)); } int a = 1; for (Iterator<String> ita = algorithms.iterator(); ita.hasNext();) { result += ("[P#" + (p + 1) + ":" + provIDers[p].getname() + "]" + "[S#" + s + ":" + stype + "]" + "[A#" + a + ":" + ita.next() + "]\n"); a++; } s++;}}
(从Android Encryption with the Android Cryptography API复制)
该列表中应该有几个AES转换.
总结以上是内存溢出为你收集整理的AES-保证Java(Android)支持吗?全部内容,希望文章能够帮你解决AES-保证Java(Android)支持吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)