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

我找不到任何地方是否每个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 providers
Provider[] 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转换.

上一篇:保护PHP的Web服务


下一篇:python-服务器之间的安全通信