使用Java加密与解密实现步骤


密码学处理数字数据的实际保护。它是指基于数学算法的机制设计,提供基本的信息安全服务。您可以将密码学视为建立一个广泛的工具包,其中包含安全应用程序中的不同技术。

什么是密码分析?
破解密文的艺术和科学被称为密码分析。密码分析是密码学的姊妹分支,它们共存。加密过程产生用于传输或存储的密文。它涉及对密码机制的研究,旨在破解它们。密码分析也用于新密码技术的设计以测试其安全强度。

密码学原语
密码学原语只不过是密码学中的工具和技术,可以有选择地用于提供一组所需的安全服务 -

  • 加密
  • 哈希函数
  • 消息验证码 (MAC)
  • 数字签名

Java中的密码学
Java Cryptography Architecture (JCA) 是一组 API,用于实现现代密码学的概念,例如数字签名、消息摘要、证书、加密、密钥生成和管理、安全随机数生成等。使用 JCA 开发人员可以通过以下方式构建他们的应用程序将安全性融入其中。要在您的应用程序中集成安全性,而不是依赖于复杂的安全算法,您可以轻松调用 JCA 中提供的相应 API 来获取所需的服务。

Java Cryptography - 加密和解密数据
您可以使用 javax.crypto 包的 Cipher 类对数据进行加密和解密。按照下面给出的步骤使用 Java 解密给定的数据。

第 1 步:创建 KeyPairGenerator 对象
KeyPairGenerator 类提供 getInstance() 方法,该方法接受表示所需密钥生成算法的字符串变量并返回生成密钥的 KeyPairGenerator 对象。

使用 getInstance() 方法创建 KeyPairGenerator 对象,如下所示。

//创建 KeyPair 生成器对象
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(
"DSA");


步骤 2:初始化 KeyPairGenerator 对象
KeyPairGenerator 类提供了一个名为 initialize() 的方法,该方法用于初始化密钥对生成器。此方法接受一个表示密钥大小的整数值。

使用 initialize() 方法初始化上一步创建的 KeyPairGenerator 对象,如下所示。

//初始化KeyPairGenerator
 keyPairGen.initialize(2048);

第 3 步:生成 KeyPairGenerator
您可以使用 KeyPairGenerator 类的 generateKeyPair() 方法生成 KeyPair。使用此方法生成密钥对,如下所示。

//生成密钥对
KeyPair pair = keyPairGen.generateKeyPair();

第四步:获取公钥
您可以使用 getPublic() 方法从生成的 KeyPair 对象中获取公钥,如下所示。

//从密钥对中获取
PublicKey PublicKey publicKey = pair.getPublic();

第 5 步:创建一个 Cipher 对象
Cipher 类的 getInstance() 方法接受一个表示所需转换的字符串变量,并返回一个实现给定转换的 Cipher 对象。

使用 getInstance() 方法创建 Cipher 对象,如下所示。

//创建一个 Cipher 对象
Cipher cipher = Cipher.getInstance(
"RSA/ECB/PKCS1Padding");

第 6 步:初始化 Cipher 对象

Cipher 类的 init() 方法接受两个参数

  • 表示操作模式的整数参数(加密/解密)
  • 表示公钥的密钥对象

使用 init() 方法初始化 Cypher 对象,如下所示。

//初始化一个Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, publicKey);

第 7 步:将数据添加到 Cipher 对象
Cipher 类的 update() 方法接受一个表示要加密的数据的字节数组,并使用给定的数据更新当前对象。

通过将数据以字节数组的形式传递给 update() 方法来更新初始化的 Cipher 对象,如下所示。

//向密码中添加数据
byte[] input =
"Hello there, this is group 01".getBytes(); 
cipher.update(输入);

第 8 步:加密数据
Cipher 类的 doFinal() 方法完成了加密操作。因此,使用该方法完成加密,如下所示。

//加密数据
byte[] cipherText = cipher.doFinal();

第 9 步:初始化 Cipher 对象以进行解密
要解密在前面的步骤中加密的密码,您需要对其进行初始化以进行解密。

因此,通过传递参数 Cipher.DECRYPT_MODE 和 PrivateKey 对象来初始化密码对象,如下所示。

//为解密初始化相同的密码
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());

第 10 步:解密数据
最后,使用 doFinal() 方法解密加密文本,如下所示。

//解密文本
byte[] decipheredText = cipher.doFinal(cipherText);


非对称密码学的优缺点是什么
非对称加密的好处包括:

  • 由于不需要交换密钥,因此消除了密钥分配问题。
  • 由于不必将私钥传输或透露给任何人,因此安全性得到了提高。
  • 启用了数字签名的使用,以便收件人可以验证消息是否来自特定的发件人。
  • 它允许不可否认性,因此发件人不能拒绝发送消息。
  • 非对称密码学的缺点包括:

与对称密码学相比,这是一个缓慢的过程。因此,它不适合解密批量消息。

  • 如果一个人丢失了他的私钥,他就无法解密他收到的消息。
  • 因为公钥没有经过身份验证,所以没有人可以确保公钥属于指定的人。因此,用户必须验证他们的公钥是否属于他们。
  • 如果恶意行为者识别出一个人的私钥,攻击者就可以读取该人的消息。

常见的安全挑战
管理密钥是一个热门问题,尤其是在处理数据访问权限、外包的法律后果以及如何降低风险时。我们听到的常见问题:我如何保护我的公司?我们已经迁移到云端,但谁是数据的实际所有者?我在云中有哪些保护措施?如果我拥有我的所有信息,包括我在某个云提供商中的加密密钥,并且他们被传唤,会发生什么?如果我的组织被传唤,数据会怎样?

其他云和安全考虑因素是单源云提供商或多云;数据如何移动;以及组织如何在保持数据安全的同时保持对数据的控制。

归根结底,组织希望提高其数据安全性。直到最近,许多组织一直在对其密钥管理采取极简主义的方法。随着组织的发展,许多人发现构建他们的加密架构来管理 PKI、身份管理和静态数据具有挑战性。他们必须改掉一些坏习惯,特别是在密钥和证书管理方面,既要为今天而建,也要为明天做计划。