Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于蓝牙通信的轻量级对称密钥算法?_Java_Android_Algorithm_Security - Fatal编程技术网

Java 用于蓝牙通信的轻量级对称密钥算法?

Java 用于蓝牙通信的轻量级对称密钥算法?,java,android,algorithm,security,Java,Android,Algorithm,Security,在我的应用程序中,我使用AES算法进行WLAN通信,但现在我通过蓝牙传输数据,我希望获得一些安全性。问题是AES太重了,因为它给了我超过100字节的块——当我传输少于10字节时——如果可能的话,我想使用更轻的块 有人知道更好的解决方案吗?将AES与128位块一起使用。这是16个字节。初始化加密如下所示: //Generate a key KeyGenerator KeyGen = KeyGenerator.getInstance("AES"); KeyGen.init(128); SecretK

在我的应用程序中,我使用AES算法进行WLAN通信,但现在我通过蓝牙传输数据,我希望获得一些安全性。问题是AES太重了,因为它给了我超过100字节的块——当我传输少于10字节时——如果可能的话,我想使用更轻的块


有人知道更好的解决方案吗?

将AES与128位块一起使用。这是16个字节。初始化加密如下所示:

//Generate a key
KeyGenerator KeyGen = KeyGenerator.getInstance("AES");
KeyGen.init(128);
SecretKey Key = KeyGen.generateKey();

//Generate init vector
SecureRandom rng = SecureRandom.getInstance("SHA1PRNG");
byte [] IV = new byte[16];
rng.nextBytes(IV);

//Initialize the encryptor
Cipher ci = Cipher.getInstance("AES/CBC/NoPadding"); //The spec might be different!
ci.init(Cipher.ENCRYPT_MODE, Key, new IvParameterSpec(IV));

RC4具有已知的弱点。

CBC中的AES本身仅将pads添加到16字节块,这相当于每条消息平均8字节。如何获得>100字节?并且在CTR模式下使用AES完全没有开销。CTR模式需要nonce/IV,并且必须将其与数据一起传输。没有填充,但仍然有开销。CBC根据前一个块的输出修改当前块的编码方式。CTR本质上是从块密码(如AES)构建流密码。流式密码比块式密码更容易被误用,特别是你必须小心永远不要重用密钥对。@Tiago你选择了不使用填充(
AES/CBC/NoPadding
)。使用填充来避免此问题。但是,在不使用IV的情况下,使用CBC时,每个压缩的开销最多为16字节。因此,您仍然没有解释如何使用100字节的cyphertext。从何时以及由谁认为它“坏了”?从:“RC4有一些缺点,反对在新系统中使用它”。如果你想了解详细信息,请点击那里的链接。“有缺点”并不意味着“坏了”。SHA1也有弱点,但存在数百万个完全有效的X.509证书。SHA1和RC4在TLS中都被广泛使用。谢谢你的好答案,但这正是我基本上使用的-AES/CBC/PKCS5Padding。这个问题、答案和它的注释让我理解了AES的使用(尽管方式正确)。所以,答案是可以接受的。