13

ディスクに保存されているテキスト (構成) ファイルを暗号化したいと考えています。DES暗号化を使用しようとすると、クライアント マシンで致命的なエラーが発生しました。後で、アルゴリズムがアクセント付き文字を処理できないことがわかりました (!) 古いパッケージを使用していたためだと思います ( sun.misc.BASE64Decoder) - しかし、それが正しいかどうかはわかりません理由。

しかし、私はより単純な解決策を探しています - 本当に単純な暗号化が必要です (一部の人々はそれに同意しないことを知っています) - 128ビットキー程度のRSAではなく、好奇の目からテキストを覆い隠すだけです.

ウェブ上で簡単で些細な解決策を見つけることができなかったのは本当に奇妙です。

簡単な暗号化スキームを実装するにはどうすればよいですか?

4

7 に答える 7

22

Java Simplified Encryption (Jasypt)を確認してください。

Jasypt は、開発者が最小限の労力で基本的な暗号化機能をプロジェクトに追加できるようにする Java ライブラリであり、暗号化のしくみに関する深い知識は必要ありません。

  • 一方向暗号化と双方向暗号化の両方に対応する、高セキュリティの標準ベースの暗号化技術。パスワード、テキスト、数字、バイナリを暗号化...
  • Hibernate との透過的な統合。
  • Spring ベースのアプリケーションへの統合に適しており、ACEGI (Spring Security) と透過的に統合することもできます。
  • アプリケーション (データソースなど) の構成を暗号化するための統合機能。
  • 任意の JCE プロバイダーで使用できるオープン API。
  • ...その他多数
于 2009-08-30T20:28:02.960 に答える
8

この単純なOne-Time-Padアルゴリズムを使用しています。

import org.apache.commons.codec.binary.Base64;
public class Cipher {
  private static final String KEY = "some-secret-key-of-your-choice";
  public String encrypt(final String text) {
    return Base64.encodeBase64String(this.xor(text.getBytes()));
  }
  public String decrypt(final String hash) {
    try {
      return new String(this.xor(Base64.decodeBase64(hash.getBytes())), "UTF-8");
    } catch (java.io.UnsupportedEncodingException ex) {
      throw new IllegalStateException(ex);
    }
  }
  private byte[] xor(final byte[] input) {
    final byte[] output = new byte[input.length];
    final byte[] secret = this.KEY.getBytes();
    int spos = 0;
    for (int pos = 0; pos < input.length; ++pos) {
      output[pos] = (byte) (input[pos] ^ secret[spos]);
      spos += 1;
      if (spos >= secret.length) {
        spos = 0;
      }
    }
    return output;
  }

commons-codecクラスパスに追加することを忘れないでください。

于 2012-02-12T19:54:21.907 に答える
7

暗号化アルゴリズムは、文字ではなく生のバイトで機能します。

アクセント付き文字を処理できなかった理由は、生のバイトとの間で文字を変換するために使用していたコードが Unicode を処理しなかったためです。

AESを使用する必要があります。Java での使用方法の例については、こちらを参照してください。

編集: 現時点では、好奇の目からそれを隠しているだけかもしれませんが、将来がどうなるかはわかりません。強力な暗号化を今すぐ使用し、必要なのに実行しなかったことに気付かない方が常にはるかに優れています。だ。

于 2009-08-30T20:27:01.527 に答える
4

ROT13はどうですか?これはおそらく、これまでで最も単純で最悪の暗号化です (Caeser's Cipher とも呼ばれていました)。

Jay Kominek による Java での基本的な実装を次に示します。

import java.io.*;

public class rot13 {
  public static void main (String args[]) {
    int abyte = 0;
    try { while((abyte = System.in.read())>=0) {
      int cap = abyte & 32;
      abyte &= ~cap;
      abyte = ((abyte >= 'A') && (abyte <= 'Z') ? ((abyte - 'A' + 13) % 26 + 'A') : abyte) | cap;
      System.out.print(String.valueOf((char)abyte));
    } } catch (IOException e) { }
    System.out.flush();
  }
}
于 2009-08-30T20:20:12.663 に答える
2

テキストを実際に暗号化するつもりがない場合は、Base64 でエンコードしてみませんか? ナンセンスに見えますし、解読するのはとても簡単です。さらに、すでに Base64 コードを使用しています...

于 2009-08-30T20:24:04.513 に答える
0

暗号化するテキストが 1 つしかない場合、ワンタイム パッドはどうでしょうか。ワンタイム パッドは非常に簡単に作成できます。必要なのは、暗号化するデータと同じ長さのランダムなバイト列だけです

于 2009-08-30T20:22:30.537 に答える
0

Java で 3des 暗号化/復号化を使用するにはどうすればよいですか? を 参照してください。BASE64Encoder実際の入力ではなく、暗号化されたバイト配列を表すために使用されます。

于 2009-08-30T20:24:26.807 に答える