java简单对称加密_快速,简单易用的对称密码,用于Java中的整数加密

没有外部库的要求将列表减少到DES,3DES和AES. DES和3DES的块大小为64位,而AES的块大小为128位.有不同的方面,可以检查这一点.

密文大小

DES和3DES最适用于最多56位宽(非全长)的整数,因为结果将是一个8字节的单块,因为填充.如果加密一个完整的long值,则会添加一个额外的填充块.

AES将始终为任何长值的int生成一个16字节的密文.

速度

根据this analysis AES(Rijndael-128)的速度是DES / 3DES的两倍多,密钥尺寸更大(更安全).当CPU支持AES-NI时,AES甚至比DES或3DES快得多.所有当前的CPU都支持这一点.这是我从openssl speed命令获取的当前结果.

AES为16字节有效载荷达到127MB / s,而3DES仅达到27MB / s. Here是要解决的数据.

安全

不要将DES用于任何严重的事情,因为它只有56位密钥(带有奇偶校验的64位密钥).暴力迫使成本为256. 3DES也不是那么好,因为Brute强制成本是2112.AES的强制成本是2128,2192,2256,具体取决于使用的密钥大小.

可能使用AES:

private final String CIPHER_NAME = "AES/ECB/PKCS5Padding";

private final String ALGORITHM_NAME = "AES"; // keySizes 128, 192, 256

// private final String CIPHER_NAME = "DES/ECB/PKCS5Padding";

// private final String ALGORITHM_NAME = "DES"; // keySize 56

// private final String CIPHER_NAME = "DESede/ECB/PKCS5Padding";

// private final String ALGORITHM_NAME = "DESede"; // keySize 168

byte[] encrypt(SecretKey key, long num) {

BigInteger bignum = BigInteger.valueOf(num);

Cipher cipher = Cipher.getInstance(CIPHER_NAME);

cipher.init(Cipher.ENCRYPT_MODE, key);

return cipher.doFinal(bignum.toByteArray());

}

long decrypt(SecretKey key, byte[] ct) {

Cipher cipher = Cipher.getInstance(CIPHER_NAME);

cipher.init(Cipher.DECRYPT_MODE, key);

byte[] pt = cipher.doFinal(ct);

BigInteger bignum = new BigInteger(pt);

return bignum.longValue();

}

SecretKey keyGen(String algorithm, int keySize) {

KeyGenerator keygen = KeyGenerator.getInstance(algorithm);

keygen.init(keySize);

return keygen.generateKey();

}

操作模式

这里我使用ECB模式.使用它通常不是一个好主意.它具有用相同的密钥加密相同的明文导致相同的密文的问题.这可能不是可接受的财产.如果不可接受,那么您需要使用例如带有新随机IV的CBC模式.随着将通过一个额外的块炸毁密文.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值