0

我是一名德国学生,对于计算机课程,我需要用 Java 实现 DES 加密(我自己,而不是使用 Java-API)并详细解释。我没有使用 google 找到任何 Java 代码示例,但是我确实在 C 中找到了一个简单的实现。(我不懂 C,我懂一点 C++,但不是那么好,指针仍然不时让我明白。)

因此,我尝试简单地将代码从 C 转换为 Java,这确实完成了大约一半,但是我在最后一部分遇到了问题,尤其是使用以下示例:

printf("%c",M);

从谷歌告诉我的来看,这似乎是将数字(整数)转换为 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,其中之一是 System.out(FileOutputStream 很容易被 PrintOutputStream 或 PrintWriter(new OutputStreamWriter) 包装)。

于 2009-01-24T22:24:26.783 回答
0

Des 实际上是一个相当难理解的算法。我正要写博客,但是当我挖出来的时候。我不能把它分解成我满意的部分。

以下是 DES 的大致工作原理。

  1. 选择 64 位密钥。(扔掉 8 位)
  2. 对于每个 64 位块分成两半
  3. 根据生成的子键做一些基于异或的排列,并对另一半做同样的事情。
  4. 做一些替换。
  5. 做更多的排列

解密以反向编号运行。

*这是一个粗略的简化。

于 2009-01-24T23:02:00.637 回答
0

该程序适用于 RSA 算法,而不适用于 DES。DES 代码比 RSA 大 8 倍 :)

于 2009-05-14T17:30:08.703 回答