风也温柔

计算机科学知识库

java简单加密解密算法 java 加解密算法_Java常用加解密算法

  1、

  严格地说,应该说是属于编码格式,而非加密算法。

  加解密:

  /**

  * 加密

  */

   (byte[] data) {

   = new ();

   .(data);

  }

  /**

  * 解密

  */

   byte[] ( ) {

   = new ();

  byte[] bytes = null;

  try {

  bytes = .();

  } catch ( e) {

  e.();

  }

   bytes;

  }

  2、MD5和SHA

  MD5( 5,信息摘要算法),常用于文件校验。

  SHA( Hash ,安全散列算法),同样属于非可逆的算法,作用与MD5相类似。

  MD5输出是128位的,SHA输出是160位的。SHA相较于MD5而言更加安全,当然加密花费时间也更长一点。

  先设置常量

   final = "SHA";

   final = "MD5";

  加密

  /**

  * MD5加密

  */

   (byte[] data) {

   = null;

  try {

   md5 = .();

  md5.(data);

   = (md5.());

  } catch (tion e) {

  e.();

  }

   ;

  }

  /**

  * SHA加密

  */

   (byte[] data) {

   = null;

  try {

   sha = .();

  sha.(data);

   = (sha.());

  } catch (tion e) {

  e.();

  }

   ;

  }

  3、RSA

  RSA算法是一种非对称密码算法。详情见RSA算法

  设置需要用到常量,为密钥的初始化长度,密钥的长度越长,安全性就越好,但是加密解密所用的时间就会越多。一次能加密的密文长度为:密钥的长度/8-11。所以长度的密钥一次可以加密的密文为1024/8-11=。所以非对称加密一般都用于加密对称加密算法的密钥,而不是直接加密内容。对于小文件可以使用RSA加密,但加密过程仍可能会使用分段加密。

   final = "RSA";

   final int = 1024;

  3.1、java中初始化生成公钥和私钥

  /**

  * 初始化

  */

   [] () {

  [] keys = null;

  try {

   = .();

  .();

   = .();

  // 公钥

   = () .();

  // 私钥

   = () .();

  keys = new []{(.()), (.())};

  } catch (tion e) {

  e.();

  }

   keys;

  }

  3.2、加解密

  RSA有两个密钥,所以加解密方式也有两种,一种是“私钥加密-公钥解密”,另一种就是“公钥加密-私钥解密”,加解密的实现如下:

  /**

  * 私钥加密

  */

   byte[] (byte[] data, key) {

  try {

  byte[] = (key);

  // 获得私钥

   = new ();

   = .();

  Key = .();

  // 对数据加密

   = .(.());

  .init(., );

   .(data);

  } catch ( e) {

  e.();

  }

   null;

  }

  /**

  * 公钥解密

  */

   byte[] (byte[] data, key) {

  try {

  // 对私钥解密

  byte[] = (key);

   = new ();

   = .();

  Key = .();

  // 对数据解密

   = .(.());

  .init(., );

   .(data);

  } catch ( e) {

  e.();

  }

   null;

  }

  /**

  * 公钥加密

  */

   byte[] (byte[] data, key) {

  try {

  // 对公钥解密

  byte[] = (key);

  // 取公钥

   = new ();

   = .();

  Key = .();

  // 对数据解密

   = .(.());

  .init(., );

   .(data);

  } catch ( e) {

  e.();

  }

   null;

  }

  /**

  * 私钥解密

  */

   byte[] (byte[] data, key) {

  try {

  // 对私钥解密

  byte[] = (key);

   = new ();

   = .();

  Key = .();

  // 对数据解密

   = .(.());

  .init(., );

   .(data);

  } catch ( e) {

  e.();

  }

   null;

  }

  3.3 签名验证

  使用RSA进行签名验证。数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息java简单加密解密算法java简单加密解密算法,然后用对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

  该方法可行有两个的条件:

  1、通过公钥推算出私钥的做法不可能实现

  2、即使传输数据的过程被拦截java简单加密解密算法 java 加解密算法_Java常用加解密算法,因为拦截者没有私钥,改动数据就会导致签名的不一致。(这里需要注意,拦截者还是可以使用公钥对数据进行解密,看到传输的数据的)

  定义常量

   final = "";

  签名和签名验证

  /**

  * 私钥签名

  */

   (byte[] data, ) {

  try {

  // 解密私钥

  byte[] = ();

  // 构造对象

   = new ();

  // 指定加密算法

   = .();

  // 取私钥匙对象

   = .();

  // 用私钥对信息生成数字签名

   = .();

  .();

  .(data);

   (.sign());

  } catch ( e) {

  e.();

  }

   null;

  }

  /**

  * 公钥验证

  */

   (byte[] data, , sign) {

  try {

  // 解密公钥

  byte[] = ();

  // 构造对象

   = new ();

  // 指定加密算法

   = .();

  // 取公钥匙对象

   = .();

   = .();

  .();

  .(data);

  // 验证签名是否正常

   .((sign));

  } catch ( e) {

  e.();

  }

   false;

  }

  4、DES

  DES(全称为 ,即数据加密标准),是一种对称加密算法!

  定义常量

   final = "DES";

  加解密,其中key是8位的密码

  /**

  * 加密

  */

   byte[] (byte[] data, key) {

  try {

   = new ();

   = new (key.());

   = .();

   = .();

   = .();

  .init(., , );

   .(data);

  } catch ( e) {

  e.();

  }

   null;

  }

  /**

  * 解密

  */

   byte[] (byte[] data, key) {

  try {

   = new ();

   = new (key.());

   = .();

   = .();

   = .();

  .init(., , );

   .(data);

  } catch ( e) {

  e.();

  }

   null;

  }

  文章来源:https://blog.csdn.net/weixin_35725138/article/details/114451581