2011-02-26 42 views
1

我想寫我自己的RSA加密器沒有libaries!如何在RSA中加密?

代碼:

import java.util.Random; 

public class Main { 

public static void main(String[] args) { 
    System.out.println(createPrime()); 
} 

private static byte encrypt(byte message) { 
    double p = createPrime(); 
    double q = createPrime(); 
    double e = 2^new Random().nextInt(100) % (p * q); 
    byte ciphered = Math.pow(message, e); 
    return ciphered; 
} 

private static double createPrime() { 
    double testPow; 
    do { 
    int test = new Random().nextInt(20); 
    int power = new Random().nextInt(20); 
    test += 1; 
    power +=1; 
    testPow = Math.pow(test, power); 
    System.out.println("Double Math.pow: " + testPow); 
    } while (!testPrime(testPow)); 
    return testPow; 
} 

private static Boolean testPrime(Double test) { 
    int factor = 2; 
    int lastFactor = 1; 
    while (test > 1) { 
     if (test % factor == 0) { 
      lastFactor = factor; 
      test /= factor; 
      while (test % factor == 0) { 
       test /= factor; 
      } 
     } 
     factor++; 
    } 
    Boolean isPrime = false; 
    if (test == lastFactor) { 
     isPrime = true; 
    } 
    return isPrime; 
} 
} 

這就是我對加密。我不知道我應該怎麼做才能糾正這個問題,但在嘗試這些之前,我已經手動完成了這項工作。

所以我知道加密方程是 C =立方公尺E(mod N)的 和解密 M = C^d(mod N)的

其中p,q是素數 - m是消息 - c的密文 - e是N個歐拉 - N是p乘以q - N個歐拉是(p-1)(q-1)

任何幫助理解

回答

1

Java已經內置加密算法在java.security包下。 Check this。所以不需要外部庫。我沒有看到生產需要自己實現它。只有當它是家庭作業(你沒有標記)

+0

它的功課,以及不是真的......但讓我們假裝是因爲我想學這個... – Zeveso 2011-02-26 21:14:57

+1

@ user516664你可以看看java代碼。它是開源的。 – Bozho 2011-02-26 21:15:53

2

你沒有問一個真正的問題,但我看到一對夫婦的問題,反正


double e = 2^new Random().nextInt(100) % (p * q); 

我不知道是什麼這是應該做的,但這是錯誤的。你的意思是Math.Pow()而不是^?在任何情況下,通常你只需要使用一些小常數和很少的設置位來使e快速加密。 e=3e=65會正常工作。

您似乎沒有計算私鑰(d),甚至根本沒有存儲公鑰(e,p*q)。

當您開始使用大數字時,intdouble(??)將無法保存它們。改爲使用BigInteger


do { 
    testPow = Math.pow(test, power); 
} while (!testPrime(testPow)); 

如果power > 1,testPow永遠是素...


我沒有看過testPrime(),但你應該能夠寫一些簡單的單元測試來說服自己是否或者它可能不起作用。

+0

類RSA加密使用整數模指數,Math.pow在這裏並不實用。但是,是的,BigInteger有一些方法可以(相當有效率)模塊化指數。 – 2011-02-26 23:50:02

4

要做的第一件事是看看類java.math.BigInteger。這門課將幫助你實現「學校用書」RSA。