android和java aes,AES-保证Java(Android)支持吗?

这篇博客探讨了在Java和Android平台上是否可以保证AES加密算法的实现。根据Java Cryptography Architecture (JCA),AES是Java平台的一个标准加密算法,并且在Android API文档中也有提及,暗示Android很可能支持AES。文章提供了检查Android设备上可用加密转换的代码示例,确认AES在大多数情况下是支持的。
摘要由CSDN通过智能技术生成

我找不到任何地方是否每个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“

有人知道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 ks = providers[p].keySet();

Set servicetypes = new TreeSet();

for (Iterator 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 its = servicetypes.iterator(); its.hasNext();) {

String stype = its.next();

Set algorithms = new TreeSet();

for (Iterator 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 ita = algorithms.iterator(); ita.hasNext();) {

result += ("[P#" + (p + 1) + ":" + providers[p].getName() + "]" +

"[S#" + s + ":" + stype + "]" +

"[A#" + a + ":" + ita.next() + "]\n");

a++;

}

s++;

}

}

该列表中应该有几个AES转换.

标签:encryption,aes,java,android

来源: https://codeday.me/bug/20191122/2062207.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值