Java AES 加密疑惑

famingyuan 2014-08-30 11:27:29
关于AES加密算法,Java中,安全性的疑惑. 先贴代码,并在二楼补全(字数限制)

以下是源代码,有两个关键函数,用于初始化话加密器。
@Override
public boolean init() {
// 密钥生成器
try {
kenGenerator = KeyGenerator.getInstance(algorithm);
// 初始化密钥生成器 生成128位密钥,第二个参数是随机数
kenGenerator.init(128);
// 生成密钥
SecretKey secretKey = kenGenerator.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
secretKeySpec = new SecretKeySpec(enCodeFormat, algorithm);

// 生成密码器
cipher = Cipher.getInstance(algorithm);

return true;
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}

以及
@Override
public boolean init(String key) {

try {
kenGenerator = KeyGenerator.getInstance(algorithm);
// 初始化密钥生成器 生成128位密钥,第二个参数是随机数
kenGenerator.init(128, new SecureRandom(key.getBytes("UTF-8")));
// 生成密钥
SecretKey secretKey = kenGenerator.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
secretKeySpec = new SecretKeySpec(enCodeFormat, algorithm);

// 生成密码器
cipher = Cipher.getInstance(algorithm);

return true;
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return false;

}
/**
* 切换模式
*
* @param encryptOrDecrypt
* @return
*/
public synchronized Cipher switchED(int encryptOrDecrypt) {
Cipher cipher = null;
if (multiThreadMode) {
cipher = getCipher();
} else {
cipher = this.cipher;
}
if (cipher == null) {
throw new RuntimeException("Error: cipher is null ...");
}
try {
if (encryptOrDecrypt == Cipher.ENCRYPT_MODE) {
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
} else {
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
}
// 初始化加密块大小
blockSize = cipher.getBlockSize() * cryptFactor;
return cipher;
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return null;
}


分别由外部提供key和内部生成,想知道如果采用外部提供key,如:init(String)的方式,那么密码相当于就是init(String key)中的key了,这还有安全可言吗?
如果采用内部生成key,那么要么把生成的key保存到文件要么编码成字符串返回保存,到最后,也还是一个简单字符串。
这样子是不是还是不安全啊?比如说内部生成的key保存到文件,那么这个文件就会写入到硬盘,那岂不是也不安全,如果编码成字符串,在外部拿到,抄下来,写到纸上?

PS: 小弟新手,代码写的比较烂,将就看,如有大神,愿意抽出宝贵时间,为小弟斧正,将万分感谢。
...全文
1185 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vnvlyp 2014-09-11
  • 打赏
  • 举报
回复
引用 10 楼 famingyuan 的回复:
其实,我就是做来自己用的,对一些文件进行加密存储在电脑上,需要的时候解密查看。
那你就不应该固定密码啊,而应该是你每次需要解密的时候输入密码查看啊,这样不就不存在你的问题了
famingyuan 2014-09-09
  • 打赏
  • 举报
回复
引用 9 楼 vnvlyp 的回复:
[quote=引用 8 楼 famingyuan 的回复:] [quote=引用 4 楼 vnvlyp 的回复:] [quote=引用 3 楼 famingyuan 的回复:] [quote=引用 2 楼 xmt1139057136 的回复:] RSA这个加密最好了,目前使用率高
我主要是想用AES做文件加密存储,用RSA 貌似加密、解密耗时简直。。。[/quote] 你到底是什么需求?加密保存程序生成的文件么?[/quote] 我主要是想实现对文件的加密解密。[/quote] 那你是不想让用户能正常打开文件?也就是不想让用户看到文件内容?[/quote] 其实,我就是做来自己用的,对一些文件进行加密存储在电脑上,需要的时候解密查看。
vnvlyp 2014-09-08
  • 打赏
  • 举报
回复
引用 8 楼 famingyuan 的回复:
[quote=引用 4 楼 vnvlyp 的回复:] [quote=引用 3 楼 famingyuan 的回复:] [quote=引用 2 楼 xmt1139057136 的回复:] RSA这个加密最好了,目前使用率高
我主要是想用AES做文件加密存储,用RSA 貌似加密、解密耗时简直。。。[/quote] 你到底是什么需求?加密保存程序生成的文件么?[/quote] 我主要是想实现对文件的加密解密。[/quote] 那你是不想让用户能正常打开文件?也就是不想让用户看到文件内容?
famingyuan 2014-09-08
  • 打赏
  • 举报
回复
引用 4 楼 vnvlyp 的回复:
[quote=引用 3 楼 famingyuan 的回复:] [quote=引用 2 楼 xmt1139057136 的回复:] RSA这个加密最好了,目前使用率高
我主要是想用AES做文件加密存储,用RSA 貌似加密、解密耗时简直。。。[/quote] 你到底是什么需求?加密保存程序生成的文件么?[/quote] 我主要是想实现对文件的加密解密。
MiceRice 2014-09-02
  • 打赏
  • 举报
回复
居然MuMa是敏感词,害我修改了好久,还不得不分成上下篇发送。。。 有点扯远了。实际工作中,重要的密钥可能有几种保存方式,但大多都以介质(物理设备)管控为主: 1、在某个隔离服务器(不联网)的介质上; 2、特种介质上(UKey)之类的; 3、特殊的IC卡之类的。 远距离传输密钥是个比较麻烦的事情,一般来说:短期密钥可以直接以非对称密钥加密后进行传输,具体请Google吧;长期密钥还是专人押送介质靠谱。
MiceRice 2014-09-02
  • 打赏
  • 举报
回复
无论是什么加密算法,密钥的管理都是一件非常重要的事情。 这就好比你家门的钥匙丢了,家里肯定就没有安全性了。 所以后期发展出多种复合认证机制,也就相当于使用了多种密钥分发的方式,比如: ◎ 短信验证,相当于把一个临时性密钥发到你手机上,如果你手机被安装了木马或直接被你老婆拿走了,还是不安全; ◎ UKey之类的介质验证,相当于用了一个介质来管理密钥,再配合PIN码啥的;那么这个介质丢了、PIN码泄漏了,同样有问题。 多种复合机制可以大大提升总体安全性。
w_l_o_v_e_c 2014-09-01
  • 打赏
  • 举报
回复
不知道这些加密算法是不是要导入一些jar包,从来没做过,听听高人们分析分析。。。
vnvlyp 2014-09-01
  • 打赏
  • 举报
回复
引用 3 楼 famingyuan 的回复:
[quote=引用 2 楼 xmt1139057136 的回复:] RSA这个加密最好了,目前使用率高
我主要是想用AES做文件加密存储,用RSA 貌似加密、解密耗时简直。。。[/quote] 你到底是什么需求?加密保存程序生成的文件么?
famingyuan 2014-08-31
  • 打赏
  • 举报
回复
引用 2 楼 xmt1139057136 的回复:
RSA这个加密最好了,目前使用率高
我主要是想用AES做文件加密存储,用RSA 貌似加密、解密耗时简直。。。
业余草 2014-08-31
  • 打赏
  • 举报
回复
RSA这个加密最好了,目前使用率高
vnvlyp 2014-08-31
  • 打赏
  • 举报
回复
把密码写在代码里本来就不安全,要写也是用非对称加密算法比如RSA等

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧