0

私はドイツ人の学生です。コンピュータクラスの場合、JavaでDES暗号化を実装し(Java-APIを使用するのではなく、自分で)、詳細に説明する必要があります。googleを使用したJavaコードの例は見つかりませんでしたが、Cで簡単に実装できました。(私はCを知りません、私は少しC ++を知っていますが、それほどよくはありません、ポインターはまだ時々私を取得します。)

そこで、コードをCからJavaに変換しようとしましたが、途中でうまくいきましたが、最後の部分、特に次の例を使用すると問題が発生します。

printf("%c",M);

これは、Googleが私に言ったことから、数値(整数)をASCII文字に変換しているようですが、私にはよくわかりません。私のコードはその最後の部分まで機能しているようですので、私に修正/ヒントを与えることができる人に感謝します。

私のコード:

import java.util.Scanner;

public class DES {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Scanner eingabe = new Scanner(System.in);

        int p, q, key2, fn, encryption_key, temp1 , temp2 ,
            t, s =0 , privatekey1=1, b=0 , passwort_s=0, klartext;
        int[] Cipher = new int [100];
        String passwort;

        System.out.println("Enter the value of p and q");

        p = eingabe.nextInt();
        q = eingabe.nextInt();

        System.out.println(p);
        System.out.println(q);

        key2= p*q;


        fn=(p-1)*(q-1);
        System.out.println("Enter Enryption key e: ");
        encryption_key = eingabe.nextInt();

        do {

            s=(privatekey1*encryption_key)%fn;
            privatekey1++; 

        } while (s!=1); 

        privatekey1=privatekey1-1;



        System.out.println("Public Key : "+ encryption_key + ","+ key2 );
        System.out.println("Private Key: "+ privatekey1 + "," +key2 );
        System.out.println("Enter Message: ");
        passwort= eingabe.next();
        for ( temp2 = 0; temp2 < passwort.length(); temp2++) 
        {
            t = passwort.charAt(temp2);
            passwort_s=1;
            for(temp1 =0 ; temp1< encryption_key ; temp1++){
                passwort_s= passwort_s*t%key2;
            }
            passwort_s= passwort_s%key2;
            System.out.println(passwort_s);
        }

        System.out.println("Enter cipher Text: ");
        for(temp1=0;temp1< passwort.length(); temp1++ )
        {
            Cipher[temp1]= eingabe.nextInt();
        }

        System.out.println("Plainttext: ");
        for(temp2 =0; temp2 < passwort.length(); temp2++);
        {
            klartext=1;

            for(temp1 =0; temp1 < privatekey1; temp1 ++){
                klartext=klartext*Cipher[temp2]%key2;
            }
            klartext=klartext%key2;
            System.out.println(klartext);
        }
    }
}

どうすれば変換できますか

printf("%c",M);

Javaに、そしてこれは完全なDES実装ですか?

4

4 に答える 4

2

遅くて疲れましたが、これは DES の実装ではありませんね。

RSAに似ています。

ええ、あなたの投稿のリンクは非対称暗号システムです。DES は対称です。

于 2009-01-24T22:34:24.233 に答える
1

または、より簡潔に:

output.print((char)M);

これは、Mが0から127までのASCII文字(または0から255までのISO 8859-1文字、または0から65535までのUnicode文字)を表す数値であると想定しています。

また、出力がPrintWriterまたはPrintStreamであり、そのうちの1つがSystem.outであると想定しています(FileOutputStreamはPrintOutputStreamまたはPrintWriter(new OutputStreamWriter)によって簡単にラップされます)。

于 2009-01-24T22:24:26.783 に答える
0

Des は、実際には理解するのがかなり難しいアルゴリズムです。私はそれについてブログを書こうとしていましたが、掘り下げたとき。満足のいく断片に分解することはできませんでした。

これが非常に大雑把な DES の動作です。

  1. 64 ビット キーを選択します。(8ビットを捨てる)
  2. 半分に分割された 64 ビット ブロックごとに
  3. 生成されたサブキーに基づいていくつかの xor ベースの置換を行い、残りの半分に対して同じことを行います。
  4. いくつかの置換を行います。
  5. さらに順列を行う

逆数で実行を復号化します。

*これは大まかな単純化です。

于 2009-01-24T23:02:00.637 に答える
0

このプログラムは RSA アルゴリズム用であり、DES 用ではありません。DES コードは RSA の 8 倍です :)

于 2009-05-14T17:30:08.703 に答える