java 中的简单加密-否 key/password

Simple encryption in java-no key/password

假设我有一个 IP 地址,192.168.1.1

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

例如

I enter 192.168.1.1

Program converts it to AzlQrEHCSD or some other random string

I enter this string in the program

It gets converted back to 192.168.1.1

是否有任何简单的算法可以在不生成密钥或其他密码等内容的情况下执行此操作?我知道密钥和密码是加密和解密的必须,但我的场景不需要它。

如果生成的字符串是 "random",那么您的应用程序必须始终跟踪任何生成的字符串。可能不是一个好的设计。

一个快速的穷人 "encryption" 将是 ROT47 ( http://rot47.net/ )

我知道它有点矫枉过正,但我​​会使用 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 encode and decode a string

您可以将 ip String 编码为 base64,反转字符串,然后使用 Caesar cipher:

public String easeyEncrypt(String ip) {
   String b64encoded = Base64.getEncoder().encode(ip);

   // 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(reverse.charAt(i) + OFFSET);
   }
   return tmp.toString();
}

向后解密:

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

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

这是最简单的 encrypt/decrypt 代码,但并不安全。

     String strip = "192.168.1.11";        
     byte[] encryptArray = Base64.encodeBase64(strip.getBytes());        
     String encstr = new String(encryptArray,"UTF-8");   
     System.out.println("Enc   >>  "+ encstr);


     String strDec = "MTkyLjE2OC4xLjEx";
     byte[] dectryptArray = strDec.getBytes();
     byte[] decarray = Base64.decodeBase64(dectryptArray);
     String decstr = new String(decarray,"UTF-8"); 
     System.out.println("Dec  >>>  "+ decstr);

为此你必须import org.apache.commons.codec.binary.Base64;

您可以Link

下载org-apache-commons-codec.jar文件

几乎与 higuaro 解决方案相同,但有很多修复使其工作,以下代码经过测试并工作,因为 higuaro 不能正常工作,就像字符进入数字和当你反转它得到一个号码并损坏一切:

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));
}

希望对您有所帮助。

这里是一个简单的随机加密:

class SimpleStringEncryption {

  public static String encrypt(String str){
    int code;
    String result = "";
    for (int i = 0; i < str.length(); i++) {
      code = Math.round((float) Math.random()*8+1);
      result += code + Integer.toHexString( ((int) str.charAt(i) ) ^ code )+"-";
    }
    return result.substring(0, result.lastIndexOf("-"));
  }

  public static String decrypt(String str){
    str = str.replace("-", "");
    String result = "";
    for (int i = 0; i < str.length(); i+=3) {
      String hex =  str.substring(i+1, i+3);
      result += (char) (Integer.parseInt(hex, 16) ^ (Integer.parseInt(String.valueOf(str.charAt(i)))));
    }
    return result;
  }

    public static void main (String[] args) {
        String e = "some text to encrypt";
        String encrypted = encrypt(e);
        System.out.println(encrypted);
        System.out.println(decrypt(encrypted));
    }  

}

希望这对您有所帮助。