AES-保证Java(Android)支持吗?

AES-保证Java(Android)支持吗?,第1张

概述我找不到任何地方是否每个Java平台实现都必须附带AES实现.我想在Android上使用以下代码:SecretKeySpecskeySpec=newSecretKeySpec(key,"AES");Ciphercipher=Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE,skeySpec);decrypted=cipher.doFinal(en

我找不到任何地方是否每个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)支持吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存