zoukankan      html  css  js  c++  java
  • 【Java库】如何使用优秀的加密库Jasypt来保护你的敏感信息?

    1 简介

    今天我们介绍一个Java库-Jasypt,全称为Java Simplified Encryption,用于加密解密。它能够让开发者用花费最小的工作而把加密集成到项目中,并且不需要对加密/解密有深入的了解。

    通过Maven引用jar包如下:

    <dependency>
      <groupId>org.jasypt</groupId>
      <artifactId>jasypt</artifactId>
      <version>1.9.3</version>
      <scope>compile</scope>
    </dependency>
    

    2 简单文本加密

    文本加密是加密中最经常遇到的需求,如通讯消息、交易流水、账号信息等,这些都是非常敏感的信息,许多场景下都需要加密储存,然后读取展示的时候再解密。Jasypt提供的API非常方便,设置加密的密钥后,就可以加密信息了,代码如下:

    BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
    //设置加密密钥
    textEncryptor.setPassword("MySalt");
    //加密信息
    String encryptedText = textEncryptor.encrypt("This is a secret message.");
    System.out.println("encryptedText:" + encryptedText);
    //解密
    String decryptedText = textEncryptor.decrypt(encryptedText);
    System.out.println("decryptedText:" + decryptedText);
    

    代码执行的结果为:

    encryptedText:S+j0ZQBxJloVi/qrEwvgnnu9tmeFMnJcmMoTY8wBhbLIdR2IFDt+Fw==
    decryptedText:This is a secret message.
    

    3 单向密码加密

    用户密码是极其敏感的信息,不应该把密码明文储存在数据库中。我们需要把密码明文进行加密处理后,再把密文储存在数据库中。当用户登陆时,需要进行密码校验,有两种方案:一种方案是把数据库中的密文解密成明文,再与用户输入的密码进行对比;另一种方案是把用户输入的密码进行加密,把加密后的密文与数据库的密文进行对比。

    第二种方案是更合理的,一方面是因为加密比解密更容易,性能更好;另一方面是减少明文出现的次数,保证安全性。第二种方案完全不需要解密,所以我们只需要单向地密码加密便可以了。以下代码展示这种场景下的应用:

    BasicPasswordEncryptor encryptor = new BasicPasswordEncryptor();
    //加密密码
    String encryptedPassword = encryptor.encryptPassword("MyPassword");
    //检查密码:正确
    System.out.println(encryptor.checkPassword("MyPassword", encryptedPassword));
    //检查密码:错误
    System.out.println(encryptor.checkPassword("myPassword", encryptedPassword));
    

    代码执行的结果为:

    true
    false
    

    4 改变加密算法

    Jasypt为我们提供的灵活的加密/解密操作,可以自定义地使用不同的算法进行加密解密。下面的代码例子展示了如何使用加密算法PBEWithMD5AndTripleDES

    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    //设置密钥
    encryptor.setPassword("MySalt");
    //设置加密算法
    encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
    //加密信息
    String encryptedText = encryptor.encrypt("My secret message.");
    System.out.println("encryptedText:" + encryptedText);
    //解密
    String decryptedText = encryptor.decrypt(encryptedText);
    System.out.println("decryptedText:" + decryptedText);
    

    代码执行的结果为:

    encryptedText:fdNthKMZzNC5zeNO6b119njcKpqD/02EuGm2fsRs8+c=
    decryptedText:My secret message.
    

    5 多线程解密

    解密通常是比加密更难的过程,Jasypt提供了多线程解密操作,可以并行解密,这样可以提供更好的性能。一般建议可以设置与机器处理器核数一致的线程数进行解密。代码如下:

    PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
    //设置线程数为6
    encryptor.setPoolSize(6);
    //设置密钥
    encryptor.setPassword("MySalt");
    //设置算法
    encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
    //加密
    String encryptedText = encryptor.encrypt("My secret message.");
    System.out.println("encryptedText:" + encryptedText);
    //解密
    String decryptedText = encryptor.decrypt(encryptedText);
    System.out.println("decryptedText:" + decryptedText);
    

    代码执行结果为:

    encryptedText:wuZLTiEZ52O/nD2ktecPP75LRj+1Bu3s7YyfK8XcOc0=
    decryptedText:My secret message.
    

    6 总结

    本文介绍了一个优秀的Java加密库Jasypt的几种操作,希望对大家在加密场景中有帮助。另外,Jasypt还能与其它框架进行整合,如SpringHibernate,以后将为大家介绍。


    欢迎关注公众号<南瓜慢说>,将持续为你更新...

    file

    欢迎加博主微信,做一个点赞之友,哈哈...

    file

    多读书,多分享;多写作,多整理。

  • 相关阅读:
    Browse information of one or more files is not available解决办法
    python中装饰器的使用
    python:匿名函数lambda
    python:列表生成式的学习
    python:列表切片知识的总结
    python:*args和**kwargs的用法
    NAT
    ACL
    三层交换技术和HSRP协议
    单臂路由与DHCP中继
  • 原文地址:https://www.cnblogs.com/larrydpk/p/12026512.html
Copyright © 2011-2022 走看看