精华内容
下载资源
问答
  • ElGamal算法

    2015-06-03 19:42:02
    elgamal算法实现代码,c++语言,比较完整的实现了该算法,密码学课程学习
  • ElGamal算法1. 算法概述模型分析 1. 算法概述 ElGamal算法和ECC算法基于离散对数问题建立。与典型非对称加密算法RSA算法相比,ElGamal算法则被称为常用非对称加密算法。 ElGamal既可用于加密,又可用于数字签名,是...

    1. 算法概述

    ElGamal算法和ECC算法基于离散对数问题建立。与典型非对称加密算法RSA算法相比,ElGamal算法则被称为常用非对称加密算法。

    ElGamal既可用于加密,又可用于数字签名,是除RSA算法外最具代表性的公钥加密算法之一。

    ElGamal算法就有较好的安全性,被广发应用。著名的美国数字签名标准(Digital Signature Standard, DSS)就是采用ElGamal签名方案的一种变形——DSA(Digital Signature Algorithm)。

    缺点:
    ElGamal的密文会成倍扩张。

    2. 模型分析

    Java6中没有提供ElGamal算法, 但是Bouncy Castle中对ElGamal算法进行了实现。ElGamal算法在构建密钥时的操作流程几乎和RSA算法完全一致。所不同的是RSA中是Alice构建密钥, 而在ElGamal中,Bob成了密钥构建方。假设的消息模型如下:
    Alice为消息发送方,Bob为消息接收方,双方在消息发送前已将ElGamal算法作为消息传递的加密算法。

    ElGamal加密算法流程图
    在这里插入图片描述

    1. 构建并发布密钥

    1、2步骤为构建密钥流程

    1. 使用密钥进行加密消息的交互

    3、4、5为使用密钥进行加密消息交互

    Bouncy Castle提供的ElGamal算法实现遵循 “公钥加密, 私钥解密”的加密/解密方式。

    3. 代码实现

    Bouncy Castle对ElGamal算法具体实现细节如下:

    算法密钥长度密钥默认长度工作模式填充模式备注
    ElGamal160~16384位(密钥长度为8的整数倍)1024ECB、NONENoPadding、PKCS1Padding、OAEPWithMD5AndMGF1Padding、OAEPWithSHA1AndMGF1Padding、OAEPWithSHA224AndMGF1Padding、OAEPWithSHA256AndMGF1Padding、OAEPWithSHA384AndMGF1Padding、OAEPWithSHA512AndMGF1Padding、ISO9796-1PaddingBouncy Castle实现

    3.1 算法实现

    package com.calvin.android.demo2.secrity;
    
    import android.util.Log;
    
    import org.bouncycastle.jce.provider.BouncyCastleProvider;
    
    import java.security.AlgorithmParameterGenerator;
    import java.security.AlgorithmParameters;
    import java.security.Key;
    import java.security.KeyFactory;
    import java.security.KeyPair;
    import java.security.KeyPairGenerator;
    import java.security.PrivateKey;
    import java.security.Provider;
    import java.security.PublicKey;
    import java.security.SecureRandom;
    import java.security.Security;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.DHParameterSpec;
    
    /**
     * Author:cl
     * Email:lhzheng@grandstream.cn
     * Date:20-10-20
     */
    public class ElGamalCoder {
        //非对称加密密钥算法
        public static final String KEY_ALGORITHM = "ElGamal";
    
        private static final int KEY_SIZE = 256;
        private static final String PUBLIC_KEY = "ElGamalPublicKey";
        private static final String PRIVATE_KEY = "ElGamalPrivateKey";
    
        /**
         * 私钥解密
         * @param data 待解密数据
         * @param key 私钥
         * @return byte[] 解密数据
         * @throws Exception 异常
         */
        public static byte[] decryptByPrivateKey(byte[] data, byte[] key) throws Exception {
    
            //取得私钥
            PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key);
            KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM );
            //生成私钥
            PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
            //对数据解密
            Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            return cipher.doFinal(data);
        }
    
        /**
         * 私钥加密
         * @param data 待加密数据
         * @param key 私钥
         * @return byte[] 加密数据
         * @throws Exception 异常
         */
        public static byte[] encryptByPrivateKey(byte[] data, byte[] key) throws Exception {
    
            //取得私钥
            PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key);
            KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
            //生成私钥
            PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
            //对数据加密
            Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
            cipher.init(Cipher.ENCRYPT_MODE, privateKey);
            return cipher.doFinal(data);
        }
    
        /**
         * 公钥解密
         * @param data 待解密数据
         * @param key 公钥
         * @return byte[] 解密数据
         * @throws Exception 异常
         */
        public static byte[] decryptByPublicKey(byte[] data, byte[] key) throws Exception {
            //取得公钥
            X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key);
            KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
            //生成公钥
            PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);
            //对数据解密
            Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
            cipher.init(Cipher.DECRYPT_MODE, publicKey);
            return cipher.doFinal(data);
        }
    
        /**
         * 公钥加密
         * @param data 待加密数据
         * @param key 公钥
         * @return byte[] 加密数据
         * @throws Exception 异常
         */
        public static byte[] encryptByPublicKey(byte[] data, byte[] key) throws Exception {
            //取得公钥
            X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key);
            KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
            //生成公钥
            PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);
            //对数据解密
            Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            return cipher.doFinal(data);
        }
    
        private static final String TAG = "ElGamalCoder";
    
        public static Map<String, Object> initKey() throws Exception {
    
            //实例化BC Provider, Android系统支持BC Provider, 这里将系统可能是旧的版本去掉,加入新版本的BC Provider
            Provider bcProvider = new BouncyCastleProvider();
            Security.removeProvider("BC");
            Security.addProvider(bcProvider);
    
    		/**
            Provider[] providers = Security.getProviders();
            for (Provider provider: providers){
                Log.d(TAG, "provider name = "+provider);
    
                for (Map.Entry<Object, Object> entry: provider.entrySet()){
                    Log.d(TAG, "\t "+entry.getKey()+", "+entry.getValue());
                }
            }
    		**/
    
            AlgorithmParameterGenerator apg = AlgorithmParameterGenerator.getInstance(KEY_ALGORITHM, bcProvider);
            //初始化算法参数生成器
            apg.init(KEY_SIZE);
            //生成算法参数
            AlgorithmParameters algorithmParameters = apg.generateParameters();
            //构建参数材料
            DHParameterSpec elParams = (DHParameterSpec)algorithmParameters.getParameterSpec(DHParameterSpec.class);
            //实例化密钥对生成器
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
            //初始化密钥对生辰其
            keyPairGen.initialize(elParams,new SecureRandom());
            //生成密钥对
            KeyPair keyPair = keyPairGen.generateKeyPair();
            //公钥
            PublicKey publicKey = keyPair.getPublic();
            //私钥
            PrivateKey privateKey = keyPair.getPrivate();
            //封装密钥
            Map<String, Object> keyMap = new HashMap<>(2);
            keyMap.put(PUBLIC_KEY, publicKey);
            keyMap.put(PRIVATE_KEY, privateKey);
            return keyMap;
        }
    
        public static byte[] getPublicKey(Map<String, Object> keyMap){
    
            return  ((Key)keyMap.get(PUBLIC_KEY)).getEncoded();
        }
    
        public static byte[] getPrivateKey(Map<String, Object> keyMap){
            return  ((Key)keyMap.get(PRIVATE_KEY)).getEncoded();
    
        }
    }
    
    

    3.2 测试代码

    @Test
        public void testElGamal() throws Exception {
            Map<String, Object> keyMap = ElGamalCoder.initKey();
            //公钥
             byte[] elgamalPubKey = ElGamalCoder.getPublicKey(keyMap);
            //私钥
             byte[] elgamalpriKey = ElGamalCoder.getPrivateKey(keyMap);
    
            System.out.println("公钥:\t"+ Base64.encodeToString(elgamalPubKey, Base64.DEFAULT));
            System.out.println("私钥:\t"+ Base64.encodeToString(elgamalpriKey, Base64.DEFAULT));
            String inputStr = "ElGamal加密";
            byte[] data = inputStr.getBytes();
            System.out.println("原文:\t"+ inputStr);
            byte[] encodedData = ElGamalCoder.encryptByPublicKey(data, elgamalPubKey);
            System.out.println("加密后:\t"+ Base64.encodeToString(encodedData,Base64.DEFAULT));
            byte[] decodedData = ElGamalCoder.decryptByPrivateKey(encodedData, elgamalpriKey);
            String outputStr = new String(decodedData);
            System.out.println("解密后:\t"+ outputStr);
            assertEquals(inputStr,outputStr);
    
        }
    

    3.3 运行结果

    2020-10-20 17:02:17.013 11052-11067/com.calvin.android.demo2 I/System.out: 公钥:	MHcwUAYGKw4HAgEBMEYCIQD/GaVs/HmUpVVOtSF8C0t/OcPNEHO83sjCdvdhkBM5fwIhAKkFaKSP
    2020-10-20 17:02:17.013 11052-11067/com.calvin.android.demo2 I/System.out: nrJIz2duJFVY+kEstf31SVuOlLmyt93MghofAyMAAiAKp+k1o2R5ZlBcUvOGwVPl4xtbNjNM6yHi
    2020-10-20 17:02:17.013 11052-11067/com.calvin.android.demo2 I/System.out: 4lD2+/1Omw==
    2020-10-20 17:02:17.013 11052-11067/com.calvin.android.demo2 I/System.out: 私钥:	MHoCAQAwUAYGKw4HAgEBMEYCIQD/GaVs/HmUpVVOtSF8C0t/OcPNEHO83sjCdvdhkBM5fwIhAKkF
    2020-10-20 17:02:17.013 11052-11067/com.calvin.android.demo2 I/System.out: aKSPnrJIz2duJFVY+kEstf31SVuOlLmyt93MghofBCMCIQDQXbdvrqqfhkLAfMEGvsLtbawlxsg+
    2020-10-20 17:02:17.013 11052-11067/com.calvin.android.demo2 I/System.out: wydVKsyJKgZpyg==
    2020-10-20 17:02:17.013 11052-11067/com.calvin.android.demo2 I/System.out: 原文:	ElGamal加密
    2020-10-20 17:02:17.019 11052-11067/com.calvin.android.demo2 I/System.out: 加密后:	Rx58tvdX4HHKSlAFjTAxRnB0UwZL3L2IVzeQ+KlG7MuBkNRn7hAQ4KKLi/tgTmYDmDsia7VVDEbU
    2020-10-20 17:02:17.019 11052-11067/com.calvin.android.demo2 I/System.out: pLGxfKSoHw==
    2020-10-20 17:02:17.021 11052-11067/com.calvin.android.demo2 I/System.out: 解密后:	ElGamal加密
    
    展开全文
  • 7.5ElGamal算法

    2020-11-30 19:43:15
    1、ElGamal密码体制,它是由Tacher Elgamal在1985年提出的,是一种概率性也就是不确定性公钥加密算法,该算法的安全性基于又一类数学困难问题,就是有限域...3、ElGamal算法的描述 4、ElGamal算法的安全性 有学者

    1、ElGamal密码体制,它是由Tacher Elgamal在1985年提出的,是一种概率性也就是不确定性公钥加密算法,该算法的安全性基于又一类数学困难问题,就是有限域上的离散对数问题
    2、有限域上的离散对数问题在这里插入图片描述
    在这里插入图片描述
    如果已知a,p,x,那么使用快速指数算法可以轻易地算出b
    如果仅知a,p,b,特别是当p的取值特别大时,要想求出x是非常困难的
    为了使基于离散对数问题的公钥密码算法具有足够的密码强度,一般要求p的长度在150位以上
    3、ElGamal算法的描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4、ElGamal算法的安全性
    有学者曾提出模p生成的离散对数密码可能存在陷门,一些‘弱’素数p下的离散对数较容易求解

    展开全文
  • ElGamal算法加解密

    2021-09-16 22:46:36
    文章目录ElGamal算法加解密算法流程代码实现运行结果 ElGamal算法加解密 算法流程 参数选取:素数p,生成元g,小于p的随机非负整数x 产生密钥:公钥: y = g ^ x mod p, 私钥: x 加密过程:选取小于p的随机非负整数k...

    ElGamal算法加解密

    算法流程

    • 参数选取:素数p,生成元g,小于p的随机非负整数x
    • 产生密钥:公钥: y = g ^ x mod p, 私钥: x
    • 加密过程:选取小于p的随机非负整数k, 对于明文M, 产生密文对{C1 = g ^ x mod p, C2 = M * y ^ k mod p}
    • 解密过程:M = C2 / C1 ^ x mod p
    • 注意:k需要永久保存,且不能重复使用

    代码实现

    # -*-coding:utf-8-*-
    """
    File Name: ElGamal算法加解密.py
    
    Program IDE: PyCharm
    
    Create Time: 2021-09-16 16:11
    
    Create By Author: 陆依依
    
    """
    
    # 密钥产生:素数p,生成元g,小于p的随机非负整数x, 产生公钥: y = g ^ x mod p, 私钥: x
    #
    # 加密过程:小于p的随机非负整数k, 明文M, 密文对{C1 = g ^ x mod p, C2 = M * y ^ k mod p}
    #
    # 解密过程:M = C2 / C1 ^ x mod p
    #
    # 注意:k需要永久保存,且不能重复使用
    
    def Init():
        print("ElGamal加密算法:")
        print("输入:素数p,生成元g,小于p的随机数x, 私钥:x,小于p的随机非负整数k, 明文M")
        print("请输入初始参数:")
        p = int(input("大素数p="))
        g = int(input("生成元g="))
        x = int(input("随机数x="))
        k = int(input("随机数k="))
        M = int(input("明文M="))
        return p, g, x, k, M
    
    
    def BuildKey(g, x, p):
        return g**x % p, x
    
    
    def Encrypt(p, g, k, y, M):
        return g**k % p, (M * y**k) % p
    
    
    # 求分数的模p同余   a/x mod p
    def ModP(a, x, p):
        # 统一x为正数
        if x < 0:
            x = -x
            a = -a
    
        # 统一a为非负数
        while a < 0:
            a += p
    
        a = a % p
    
        i = 0
        while True:
            if (i*x) % p == a:
                return i*x
            i = i + 1
    
    
    # 解密
    def Decrypt(C1, C2, x, p):
        return ModP(C2, C1**x, p) / abs(C1**x)
    
    
    # demo
    if __name__ == "__main__":
        # 初始化参数
        p, g, x, k, M = Init()
    
        # 产生公私钥对(y, x)
        y, x = BuildKey(g, x, p)
    
        # 加密,产生密钥对(C1, C2)
        C1, C2 = Encrypt(p, g, k, y, M)
        print("密文对为{" + str(C1) + ", " + str(C2) + "}")
    
        # 解密
        M1 = int(Decrypt(C1, C2, x, p))
        print("解密后的明文:" + str(M1))
    
    

    测试数据

        # 测试数据1:密文对:(97,31)
        # 97
        # 5
        # 58
        # 36
        # 3
    

    运行结果

    运行结果

    展开全文
  • RSA信息保障与安全实验报告学 院 计算机科学与技术专 业 计算机科学与技术年 级 2007级姓 名 张炎辉学 号 30072161082010年 4 月 28 日1、试验题目1.1题目《简化RSA、ElGamal算法》1.2具体要求任务:(1) 编写一个...

    RSA

    信息保障与安全

    实验报告

    学 院 计算机科学与技术

    专 业 计算机科学与技术

    年 级 2007级

    姓 名 张炎辉

    学 号 3007216108

    2010年 4 月 28 日

    1、试验题目

    1.1题目

    《简化RSA、ElGamal算法》

    1.2具体要求

    任务:(1) 编写一个程序实现简化RSA加密算法如图1; (2) 编写一个程序实现简化ElGamal加密算法如图2。

    要求:两个程序都应该具有一个简单的输入{密钥长度,公开密钥,明文M/密文C}和输出{秘密密钥,密文C /明文M }界面。所有的输入输出数据用十进制表示。

    1.3 测试用例

    (1) 简化RSA加密

    密钥长度=15 bits,N=pq=131×191=25021,e=3,d=16467,M=24021,C=14307。

    (2) 简化ElGamal加密

    密钥长度=14 bits,p=9973,α=11,y=5445,a=1751,M=7651,C={111520( 1028(mod 9973),5905}。

    2、算法实现

    2.1流程图

    2.2测试结果

    2.2.1 测试用例一

    图一 开始界面

    图二 密钥生成器

    图三 加密

    图四 解密

    2.2.2测试用例二

    图一 密钥生成器

    图二 加密

    图三 解密

    3、代码实现

    #include

    #include

    using namespace std;

    int gcd(long a,long b)

    {

    if(a < b){

    long temp = a;

    a = b;

    b = temp;

    }

    while(a%b){

    long c = a%b;

    a = b;

    b = c;

    }

    return b;

    }

    /*RSA*/

    void RSA_key_generate(long length,long p,long q,long &n,long &e,long &d){

    n = q * p;

    long t = (p - 1)*(q - 1);

    for(e = 2; gcd(e,t) != 1 ;e++);

    long de = 1;

    for(int k = 0;de%e != 0;k++){

    de = de + t;

    }

    d = de/e;

    }

    int RSA_Encryption(long n,long e,long m){

    long c = 1;

    for(int i = 1;i <= e; i++)

    {

    c = c*m;

    if(c > n) c = c%n;

    }

    return c;

    }

    int RSA_Decrypt(long n,long d,long c){

    long m = 1;

    for(int i = 1;i <= d; i++)

    {

    m = m*c;

    if(m > n) m = m%n;

    }

    return m;

    }

    /**/

    /*ElGamal*/

    typedef struct r_t

    {

    long r;

    long t;

    };

    void ElGamal_key_generate(long length,long p,long a,long x,long &y)

    {

    y = 1;

    for(int i = 1;i <= x;i++)

    {

    y = y*a;

    if(y > p) y = y%p;

    }

    }

    r_t ElGamal_Encryption(long p,long a,long y,long m)

    {

    struct r_t rt;

    rt.r = 1;

    rt.t = m;

    /*random number*/

    srand((unsigned)time(NULL));

    int k = 1520;//rand()%1024;

    /**/

    for(int i = 1;i <= k; i++){

    rt.r = rt.r*a;

    if(rt.r > p){

    rt.r = rt.r%p;

    }

    rt.t = rt.t*y;

    if(rt.t > p){

    rt.t = rt.t%p;

    }

    }

    展开全文
  • ELGamal算法的编程实现

    2021-06-19 21:51:10
    ELGamal算法的编程实现【实验目的】【实验环境】【实验预备知识点】【实验内容】【实验步骤】【实验思考题】 【实验目的】 1、理解非对称密码算法的工作原理 2、了解ELGamal算法的密钥对生成、加密、解密过程,掌握...
  • elgamal算法安全性分析

    2013-04-09 14:00:11
    elgamal算法安全性分析,论证了elgamal在选择明文攻击下不安全性
  • elgamal算法两种算法One of the influences I remember in considering software development, was my sister telling me I would be good at it because I’m ‘a really good problem solver’. We enjoyed ...
  • Elgamal算法-------简单C语言算法实现

    千次阅读 2019-09-23 13:11:42
    Elgamal算法实现 目录 Elgamal算法实现 1.基本算法 2.具体算法 3.代码 4.结果: 1.基本算法 快速幂算法 pow_mod(a,b,p) 计算a^b mod p 2.具体算法 elgamal加密算法 elgamal_en(m,pub,p,g,c1,c2) c1=g^k...
  • 1、ElGamal算法和ECC算法基于离散对数问题 2、这个是一个单向的过程。虽然密钥对构造简单,但是只是乙方向另外一方单向传送数据进行加解密,不能反向操作 3、这里只有“公钥加密、私钥解密”这个过程 4、...
  • 密码学——ELGamal算法

    千次阅读 2019-05-10 19:06:05
    密码学——ELGamal算法 ElGamal公钥密码体制是1984年斯坦福大学的Tather ElGamal提出的一种基于离散对数问题困难性的公钥体制。1985年,Tather ElGamal利用ElGamal公钥密码体制设计出ElGamal数字签名方案,该数字...
  • 加密算法: ElGamal算法

    2010-08-11 20:41:00
    3、ElGamal算法 ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。 密钥对产生办法。首先选择一个素数p,两个随机数, g 和x,g, x , 计算 y = g^x ( mod...
  • 密码学——ElGamal算法实现

    千次阅读 2019-11-22 14:50:29
    密码学——ElGamal算法实现 一,EIGamald 的密钥生成 要求:大素数的形式为p=2q+1形式的强素数,这里面q也是素数,要求p为150位的大素数,大素数p和本原根自己生成。 强素数使得其p-1只有四个因子:1,2,q,p-1...
  • java的ElGamal算法实现

    2018-04-25 12:28:00
    该class通过调用ElGamalCoder.getKeyFile()方法生成公钥和私钥,公钥文件为publicKey,私钥文件为privateKey。 加密:String miwen = ElGamalCoder.decrypt("这里传入明文", "publicKey");...
  • 最近在搞一个使用ElGamal算法的demo,遇到了不少大坑,记录下来。关于ElGamal的使用,参考该链接:非对称加密算法-ElGamal算法他这个使用,由于jdk并没有实现ElGamal,所以得引用两个jar包:bcprov-jdk16-145.jar 和...
  • ElGamal算法 ElGamalCoder ElGamalCoderTest 参考资料 本系列其他文章 ElGamal算法 ElGamal算法,是一种较为常见的加密算法,它是基于1985年提出的公钥密码体制和椭圆曲线加密体系。百度百科 就像之前说的...
  • Elgamal算法,加密算法,各算法比较

    热门讨论 2010-11-02 19:01:48
    实现Elgamal算,并对各种算法进行相应的比较,是一款简单的算法实现,用简单的C语言编写,大家很易懂的
  • ElGamal 算法思考

    千次阅读 2019-09-17 23:09:28
    ElGamal 算法 问题及其思考 密钥产生过程 : –  首先产生一大素数 p, 产生原根 g 和小于 p 的随机数 x ,计算 y≡g x mod p ,以 (y, g, p) 作为公开密钥, x 作为秘密密钥 . 加密过程 :   设...
  • 数字签名中的elgamal算法

    热门讨论 2011-05-09 18:28:55
    本压缩包中是用C编写的ELGAMAL加密算法
  • ElGamal算法实现

    千次阅读 2017-12-08 19:57:00
    一 介绍 只提供公钥加密、私钥解密 Bouncy Castle 二 参数说明 三 代码实现 四 应用场景
  • RSA和ElGamal算法的区别

    2021-09-06 14:53:47
    ElGamal算法和RSA算法的相同点,都是可以同时用于数据加密和数字签名,不同点就是前者基于离散对数,后者基于因数分解。 RSA算法的缺点就是产生密钥较麻烦,受到素数产生限制的影响,难以做到一次一密,而ELGamal...
  • [转帖]加密算法之ElGamal算法

    千次阅读 2006-02-21 00:16:00
    ElGamal算法 ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。密钥对产生办法。首先选择一个素数p,两个随机数, g 和x,g, x ElGamal用于数字签名。被签信息为M,首先...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,414
精华内容 1,365
关键字:

elgamal算法