May*_*air 8 java string random encryption algorithm
假设我有一个IP地址,192.168.1.1
我希望我的程序基于此IP地址创建一个随机的单字符串,无需密钥或密码或其他安全性即可轻松解密.
例如.
我输入192.168.1.1
程序将其转换为AzlQrEHCSD或其他随机字符串
我在程序中输入这个字符串
它被转换回192.168.1.1
是否有任何简单的算法可以做到这一点,而不会生成密钥或其他密码之类的东西?据我所知,密钥和密码都必须进行加密和解密,但我的情况并不需要它.
我知道它的矫枉过正,但我会使用jasypt库,因为它真的很容易使用.您只需要随机种子来加密或解密.
以下是加密数据的源代码:
String seed = "ipNumber";
String myIpValue = "192.168.0.1";
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(seed);
String encrypted= encryptor.encrypt(myIpValue);
Run Code Online (Sandbox Code Playgroud)
对于数据解密:
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(seed);
String decrypted = encryptor.decrypt(encrypted);
Run Code Online (Sandbox Code Playgroud)
或者您可以将您的字符串编码或解码为base64示例如下所示: Base64 Java编码和解码字符串
几乎与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();
}
Run Code Online (Sandbox Code Playgroud)
要反向删除过程:
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));
}
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助.