web-dev-qa-db-ja.com

Javaでの単純な暗号化-キー/パスワードなし

たとえば、192.168.1.1というIPアドレスがあるとします。

プログラムで、このIPアドレスに基づいてランダムな1ワードの文字列を作成します。これは、キーやパスワード、または追加のセキュリティなしで簡単に復号化できます。

例えば。

192.168.1.1と入力します

プログラムはそれをAzlQrEHCSDまたはその他のランダムな文字列に変換します

この文字列をプログラムに入力します

192.168.1.1に変換されます

キーや追加のパスワードなどを生成せずにこれを実行できる単純なアルゴリズムはありますか?暗号化と復号化では、キーとパスワードが必須であることを理解していますが、私のシナリオでは必要ありません。

9
Mayukh Nair

私はそのやり過ぎを知っていますが、本当に使いやすいので 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文字列をエンコードおよびデコード

8
Kiki

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

お役に立てば幸いです。

6
Al-Mothafar

Ip Stringbase64にエンコードし、文字列を逆にして、 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);
}
4
higuaro

これは最も単純な暗号化/復号化コードですが、安全ではありません。

     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 から取得できます

2
utkal patel

生成された文字列が「ランダム」である場合、アプリケーションは生成された文字列を常に追跡する必要があります。おそらく良いデザインではありません。

高速な貧乏人の「暗号化」は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));
    }  

}

お役に立てれば。

0
Ibrahim.H