首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java对象加密使用什么算法?

Java对象加密使用什么算法?
EN

Security用户
提问于 2017-01-09 22:16:49
回答 3查看 2.4K关注 0票数 1

我正在开发一个Java应用程序,我需要做一个对称加密来保护我的一些敏感信息。Java密码学中有许多算法,如AES、DE3 DES等。我应该使用什么算法来加密我的敏感信息?

大多数情况下,我确实有字符串值,并且有几个实例需要保护Java对象。

EN

回答 3

Security用户

发布于 2017-01-09 22:33:16

推荐的算法是AES-128 (或更高版本)。

您还应该使用随机初始化向量选择一个很好的链接方法。填充可变长度源数据是有用的,因为AES是一种块算法。AES/CBC/PKCS5Padding是一个很好的选择。

加密密钥应从加密安全(伪)随机数生成器中生成。(即Java的SecureRandom)

或者,可以使用适当的密钥派生函数从相当强的密码派生加密密钥。(在这里比较)

我假设你需要在休息时加密数据。必须考虑密钥管理。

如果您需要在传输过程中加密数据,您还需要MITM和完整性验证,这是最好用TLS完成的。(HTTPS)

票数 2
EN

Security用户

发布于 2017-01-09 22:43:19

如果您想保护一个Java对象,您需要使用SealedObject类。

下面是一个示例代码。

使用AES-128位并作为密封对象写入文件。

代码语言:javascript
运行
复制
  try {
//Generate a key
  KeyGenerator    gen = KeyGenerator.getInstance("AES");
  gen.init(128);
  Key sKey = gen.generateKey();

  Cipher c = Cipher.getInstance("AES");
  c.init(Cipher.ENCRYPT_MODE,sKey);

// do the sealing
  Car car=new Car("My car ",2014);
  SealedObject so = new SealedObject(car,c);

  FileOutputStream out = new FileOutputStream("Objects.obj");
  ObjectOutputStream oOut = new ObjectOutputStream(out);

//Save the key
  oOut.writeObject(sKey);

//Save the sealed object
  oOut.writeObject(so);
  oOut.close();
  System.out.println("SealedObject was written to Object file");

  } catch (Exception e) {
   System.out.println(e);
  }
 }

解密过程如下。它读取密封的对象并使用相同的密钥解密。

代码语言:javascript
运行
复制
try {
  FileInputStream in = new FileInputStream("Objects.obj");
  ObjectInputStream oIn = new ObjectInputStream(in);

//Read the key
  Key sKey= (Key) oIn.readObject();

//Read the sealed object
  SealedObject so= (SealedObject) oIn.readObject();
//unsealded the object
  Car car = (Car) so.getObject(sKey);
  car.getNo();
  car.getYear();

  } catch (Exception e) {
   System.out.println(e);
  }

保护对称密钥在这里是非常重要的,但它是一个离题。

AES(256)是现代标准,它被美国联邦和其他组织所使用。AES有128,192和256位加密。DES被认为是“老”的,它有许多脆弱性。DES的继承者为3 DES。3 DES缓解了DES中发现的许多漏洞。但是当涉及到软件实现时,它被认为是缓慢的,因为它将在3次内应用DES。

所以,当你有疑问的时候,一定要使用AES。

票数 2
EN

Security用户

发布于 2017-01-09 22:21:45

DES和3 DES不再被认为是强加密了。看看Rijndael,java有一个可用的实现(只是搜索堆栈溢出)。确保你阅读了如何使用盐和如何安全地储存你的钥匙。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/147830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档