⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ekeygen.java

📁 这是一个用Java实现ElGamal加密解密和签名验证的算法
💻 JAVA
字号:
/*
 * ElGamal Signature Sample
 * login name: gz847
 * @author Ge ZHANG (2937207)
 * @version 1.00 07/08/11*/
 
import java.math.BigInteger;
import java.security.*;

public class Ekeygen {
	static ElGamalSignature esign;
	static ElGamalEncryption encrypt;
    static ElGamalKeyPairGenerator ekpg;
    static KeyPair epair;
    
    public static void main(String[] args){
    	ElGamalPrivateKey eprik;
    	ElGamalPublicKey epubk;
    	ekpg = new ElGamalKeyPairGenerator();
    	ekpg.initialize(16, new SecureRandom());
        epair = ekpg.generateKeyPair();
        
        eprik = (ElGamalPrivateKey) epair.getPrivate();
        epubk = (ElGamalPublicKey) epair.getPublic();
        
        
        System.out.println("Private Key: k = " + eprik.getK() + ", g = " + eprik.getG() + ", p = " + eprik.getP());
        System.out.println("Public Key: y = " + epubk.getY() + ", g = " + epubk.getG() + ", p = " + epubk.getP());
        
        try
        {
       		esign = new ElGamalSignature();
        	esign.engineInitSign(eprik);
	        String str = "12345";
	        
	        String hash_str = MD5.md5(str);
	        System.out.println("Message : " + str);
	        esign.engineUpdate(hash_str.getBytes(), 0, hash_str.length());
    	    byte[] signedb = esign.engineSign();
    	    System.out.println("Signed Message : " + new BigInteger(signedb));
    		
    		encrypt = new ElGamalEncryption();
    		encrypt.engineInitEncrypt(epubk);
    		BigInteger msg_num = new BigInteger(str);
    		
    	    BigInteger[] encryptedmsg = encrypt.engineEncrypt(msg_num);
            
    	    System.out.println("Encrpyted Message: " + encryptedmsg[0] + "," + encryptedmsg[1]);
    	    
    	    	    
    	    BigInteger C;
    	    encrypt.engineInitDecrypt(eprik);
    	    C = encrypt.engineDecrypt(encryptedmsg);
    	    System.out.println("Decrypted Message: " + C);
    	    
    	    String hash_decrypt_str = MD5.md5(C.toString());
    	    System.out.println("Hashed decrypted message: "+ hash_decrypt_str);
    	    
    	    esign.engineInitVerify(epubk);
    	    esign.engineUpdate(hash_decrypt_str.getBytes(), 0, hash_decrypt_str.length());
    	    boolean veri = esign.engineVerify(signedb);
    		if(veri)
    			System.out.println("Verification Succeeded!");
    		else 
    			System.out.println("Verification Failed!");
    	}
    	catch(InvalidKeyException ike)
    	{
    		System.out.println("Invalid Key!");
    	}
    	catch(SignatureException s)
    	{
    		System.out.println("Signature Error Occured!");
    	}
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -