Java中的简单加密 - 没有密钥/密码

2022-09-04 06:50:18

假设我有一个 IP 地址 192.168.1.1

我希望我的程序基于此IP地址创建一个随机的单词字符串,无需密钥或密码或额外的安全性即可轻松解密。

例如。

我输入 192.168.1.1

程序将其转换为AzlQrEHCSD或其他一些随机字符串

我在程序中输入此字符串

它被转换回192.168.1.1

是否有任何简单的算法可以在不生成密钥或其他密码之类的东西的情况下做到这一点?我知道密钥和密码是加密和解密的备条件,但我的方案不需要它。


答案 1

我知道它太过分了,但我会使用jasypt库,因为它非常易于使用。您所需要的只是随机种子来加密或解码。

以下是加密数据的源代码:

String seed = "ipNumber";
String myIpValue = "192.168.0.1";

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(seed);
String encrypted= encryptor.encrypt(myIpValue);

对于数据解密:

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(seed);

String decrypted = encryptor.decrypt(encrypted);

或者,您可以直接将字符串编码或解码为base64示例,如下所示:Base64 Java编码和解码字符串


答案 2

几乎与解决方案相同,但是有很多修复程序可以使其正常工作,以下代码经过测试和工作,因为不能很好地工作,就像字符进入数字一样,当您反转它时,它会得到单个数字并损坏所有内容:higuarohiguaro

public String caesarCipherEncrypt(String plain) {
   String b64encoded = Base64.getEncoder().encodeToString(plain.getBytes());

   // Reverse the string
   String reverse = new StringBuffer(b64encoded).reverse().toString();

   StringBuilder tmp = new StringBuilder();
   final int OFFSET = 4;
   for (int i = 0; i < reverse.length(); i++) {
      tmp.append((char)(reverse.charAt(i) + OFFSET));
   }
   return tmp.toString();
}

要向后对过程进行解密:

public String caesarCipherDecrypte(String secret) {
   StringBuilder tmp = new StringBuilder();
   final int OFFSET = 4;
   for (int i = 0; i < secret.length(); i++) {
      tmp.append((char)(secret.charAt(i) - OFFSET));
   }

   String reversed = new StringBuffer(tmp.toString()).reverse().toString();
   return new String(Base64.getDecoder().decode(reversed));
}

我希望它有帮助。