Java 简单加密

2022-09-04 05:27:08

我想加密存储在磁盘上的文本(配置)文件。尝试使用DES加密,我在客户端计算机上遇到了致命错误,后来我发现该算法无法处理重音字符(!我怀疑这是因为我使用的是旧软件包() - 但我不确定这是原因。sun.misc.BASE64Decoder

但是,我正在寻找一种更简单的解决方案 - 我需要一个非常简单的加密(我知道有些人不会同意这一点) - 而不是128位密钥左右的RSA,只是从好奇的眼睛中模糊了文本。

真的很奇怪,我无法在网上找到一个简单的微不足道的解决方案。

如何实现简单的加密方案?


答案 1

查看Java Simplified Encryption (Jasypt)。

Jasypt是一个java库,它允许开发人员以最小的努力为他/她的项目添加基本的加密功能,并且不需要对加密的工作原理有深入的了解。

  • 高安全性、基于标准的加密技术,适用于单向和双向加密。加密密码,文本,数字,二进制文件...
  • 与Hibernate的透明集成。
  • 适合集成到基于弹簧的应用程序中,并且还可以与ACEGI(弹簧安全)透明地集成。
  • 用于加密应用程序(即数据源)配置的集成功能。
  • 用于任何 JCE 提供程序的开放式 API。
  • ...以及更多

答案 2

我正在使用这个简单的一次性Pad算法:

import org.apache.commons.codec.binary.Base64;
public class Cipher {
  private static final String KEY = "some-secret-key-of-your-choice";
  public String encrypt(final String text) {
    return Base64.encodeBase64String(this.xor(text.getBytes()));
  }
  public String decrypt(final String hash) {
    try {
      return new String(this.xor(Base64.decodeBase64(hash.getBytes())), "UTF-8");
    } catch (java.io.UnsupportedEncodingException ex) {
      throw new IllegalStateException(ex);
    }
  }
  private byte[] xor(final byte[] input) {
    final byte[] output = new byte[input.length];
    final byte[] secret = this.KEY.getBytes();
    int spos = 0;
    for (int pos = 0; pos < input.length; ++pos) {
      output[pos] = (byte) (input[pos] ^ secret[spos]);
      spos += 1;
      if (spos >= secret.length) {
        spos = 0;
      }
    }
    return output;
  }

不要忘记添加到类路径。commons-codec


推荐