たとえば、192.168.1.1というIPアドレスがあるとします。
プログラムで、このIPアドレスに基づいてランダムな1ワードの文字列を作成します。これは、キーやパスワード、または追加のセキュリティなしで簡単に復号化できます。
例えば。
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);
そしてデータの復号化のために:
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(seed);
String decrypted = encryptor.decrypt(encrypted);
または、文字列を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();
}
復号化を逆に進めるには:
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));
}
お役に立てば幸いです。
Ip String
をbase64
にエンコードし、文字列を逆にして、 Caesar暗号 を使用できます。
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);
}
これは最も単純な暗号化/復号化コードですが、安全ではありません。
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;
Download org-Apache-commons-codec.jarファイルを Link から取得できます
生成された文字列が「ランダム」である場合、アプリケーションは生成された文字列を常に追跡する必要があります。おそらく良いデザインではありません。
高速な貧乏人の「暗号化」はROT47です( http://rot47.net/ )
これは単純なランダム暗号化です:
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));
}
}
お役に立てれば。