|  |  | 
          
            | หากผมต้องการให้มัน p กับ q มีค่าคงที่ต้องทำยังไงเหรอครับ ขอแนวทางครับ เพราะผมได้ลองใส่ตัวเลขลงไปตรงๆมันก็ใส่ได้ เข้ารหัสได้ แต่ถอดไม่ได้ หาก p q ไม่คงที่ เวลาเข้ารหัสใหม่ด้วยข้อความเดิม ค่ามันเปลี่ยนนะครับ เรยทำให้ login ไม่ผ่าน เมื่อมันไม่ตรงกับฐานข้อมูลนะครับ 
 
  
 Code (Java)
 
 package gui;
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import java.math.BigInteger;
import java.security.SecureRandom;
/**
 * Simple RSA public key encryption algorithm implementation.
 * <P>
 * Taken from "Paj's" website:
 * <TT>http://pajhome.org.uk/crypt/rsa/implementation.html</TT>
 * <P>
 * Adapted by David Brodrick
 */
public class RSA {
  private BigInteger n, d, e;
  private int bitlen = 1024;
  /** Create an instance that can encrypt using someone elses public key. */
  public RSA(BigInteger newn, BigInteger newe) {
    n = newn;
    e = newe;
  }
  /** Create an instance that can both encrypt and decrypt. */
  public RSA(int bits) {
    bitlen = bits;
    SecureRandom r = new SecureRandom();
    BigInteger p = new BigInteger(bitlen / 2, 100, r);
    BigInteger q = new BigInteger(bitlen / 2, 100, r);
    n = p.multiply(q);
    BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q
        .subtract(BigInteger.ONE));
    e = new BigInteger("3");
    while (m.gcd(e).intValue() > 1) {
      e = e.add(new BigInteger("2"));
    }
    d = e.modInverse(m);
  }
  /** Encrypt the given plaintext message. */
  public synchronized String encrypt(String message) {
    return (new BigInteger(message.getBytes())).modPow(e, n).toString();
  }
  /** Encrypt the given plaintext message. */
  public synchronized BigInteger encrypt(BigInteger message) {
    return message.modPow(e, n);
  }
  /** Decrypt the given ciphertext message. */
  public synchronized String decrypt(String message) {
    return new String((new BigInteger(message)).modPow(d, n).toByteArray());
  }
  /** Decrypt the given ciphertext message. */
  public synchronized BigInteger decrypt(BigInteger message) {
    return message.modPow(d, n);
  }
  /** Generate a new public and private key set. */
  public synchronized void generateKeys() {
    SecureRandom r = new SecureRandom();
    BigInteger p = new BigInteger(bitlen / 2, 100, r);
    BigInteger q = new BigInteger(bitlen / 2, 100, r);
    n = p.multiply(q);
    BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q
        .subtract(BigInteger.ONE));
    e = new BigInteger("3");
    while (m.gcd(e).intValue() > 1) {
      e = e.add(new BigInteger("2"));
    }
    d = e.modInverse(m);
  }
  /** Return the modulus. */
  public synchronized BigInteger getN() {
    return n;
  }
  /** Return the public key. */
  public synchronized BigInteger getE() {
    return e;
  }
  /** Trivial test program. */
  public static void main(String[] args) {
    RSA rsa = new RSA(1024);
    
    
    String text1 = "Yellow and Black Border Collies";
    System.out.println("Plaintext: " + text1);
    BigInteger plaintext = new BigInteger(text1.getBytes());
    BigInteger ciphertext = rsa.encrypt(plaintext);
    System.out.println("Ciphertext: " + ciphertext);
    plaintext = rsa.decrypt(ciphertext);
    String text2 = new String(plaintext.toByteArray());
    System.out.println("Plaintext: " + text2);
  }
}
 ขอแนวทางน่ะครับ กำลังศึกษาทำโปรเจคจบน่ะครับ
 
 
 
 Tag : Java, MySQL
 
 
 |  
            |  |  
            | 
              
                |  |  |  |  
                |  | 
                    
                      | Date :
                          2015-07-08 21:11:08 | By :
                          illmndraft | View :
                          3056 | Reply :
                          1 |  |  |  
                |  |  |  |  |  
            |  |  
		            |  |