精华内容
下载资源
问答
  • [签名算法]DSA 算法

    2020-07-05 16:37:44
    DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的...在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。如果数据和签名不匹

    DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。 DSA是基于整数有限域离散对数难题的。

    DSA是一种更高级的验证方式。一般用于数字签名和认证。DSA 不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名。在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。如果数据和签名不匹配则认为验证失败!数字签名的作用就是校验数据在传输过程中不被修改。数字签名,是单向加密的升级!

    DSA加密算法的安全性

    DSA加密算法主要依赖于整数有限域离散对数难题,素数P必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig &Hellman算法的攻击。M一般都应采用信息的HASH值。DSA加密算法的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。

    算术中运用的参数

    DSA算法中应用了下述参数:

    p:L bits长的素数。L是64的倍数,范围是512到1024;

    q:p – 1的160bits的素因子;

    g:g = h^((p-1)/q) mod p,h满足h < p – 1, h^((p-1)/q) mod p > 1;

    x:x < q,x为私钥 ;

    y:y = g^x mod p ,( p, q, g, y )为公钥;

    H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm )。

    p, q, g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。

    签名及验证协议

    P产生随机数k,k < q;
    P计算 r = ( g^k mod p ) mod q
    s = ( k^(-1) (H(m) + xr)) mod q

    签名结果是( m, r, s )。

    验证时计算 w = s^(-1)mod q
    u1 = ( H( m ) * w ) mod q

    u2 = ( r * w ) mod q

    在这里插入图片描述
    若v = r,则认为签名有效。

    展开全文
  • DSA签名算法简介

    千次阅读 2019-04-09 20:48:43
    DSA使用公开密钥,为接受者验证数据的完整性和数据发送者的身份,也可用于由第三方去确定签名和所签数据的真实性。 信息交流中,接收方希望收到的信息未被窜改(信息完整性),还希望接收到的信息确由自己认定的...

    目录

    DSA算法

    密钥生成

    签名生成

    签名验证

    正确性验证

    DSA安全性说明


    DSA算法是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(Digital Signature Standard)。DSA使用公开密钥,为接受者验证数据的完整性和数据发送者的身份,也可用于由第三方去确定签名和所签数据的真实性。

    信息交流中,接收方希望收到的信息未被窜改(信息完整性),还希望接收到的信息确由自己认定的发送方所发(信息来源有效性),那么接收方和发送方就可以约定,共同使用DSA加密算法来实现。

    DSA算法

    常见DSA参数(p、q、签名)长度为:

    • 1024  160       320
    • 2048  224       448
    • 3072  256       512

    下面以1024位的DSA为例进行说明:

    密钥生成

    https://mmbiz.qpic.cn/mmbiz_png/3moQhp5COwbSEWI2Hzu8ujlibd4O9IK4wI8nJ85JGfaORIO5boDicNSqsic7oI2KPSDDWVTCf1vo7awGHBDpG2nCQ/640?wx_fmt=png

     

    签名生成

    https://mmbiz.qpic.cn/mmbiz_png/3moQhp5COwbSEWI2Hzu8ujlibd4O9IK4wgvSptwPO2ia6vDnapU9gw4Sg0LuP06dYZeic07f2rjRoS4EJNOl7UlgQ/640?wx_fmt=png

    对数据x散列后做签名,签名结果为一对整数(r, s)。

    签名验证

    https://mmbiz.qpic.cn/mmbiz_png/3moQhp5COwbSEWI2Hzu8ujlibd4O9IK4wRGeQVXVJga2b3EWxSUHRMbey3iaZcMfnW0Qb479Foq3sKm4uwdrUkBg/640?wx_fmt=png

     

    正确性验证

    ‘签名生成’时的s为:

    两边同乘s与k的逆,得到

    由‘签名验证’时的2、3步替换得到:

    两边同时做模p的指数运算得到:

    有‘密钥生成’时的步5替换得到:

    两边分别模q得到:

    由‘签名生成’时的步2中r与‘签名验证’时的步4中v替换得到:

     

    DSA安全性说明

    DSA加密算法的安全性

    DSA加密算法主要依赖于整数有限域离散对数难题,素数P必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig &Hellman算法的攻击。

    DSA加密算法的安全性主要依赖于p和d,若选取不当则签名容易伪造,应保证d对于p-1的大素数因子不可约。

    重要特点:两个素数公开

    DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,也能确认它们是否是随机产生的,还是作了手脚。

     

    展开全文
  • 今天我们来介绍一下非对称加密算法中的DSA算法。 DSA 算法简介 DSA(Digital Signature Algorithm)是SchnorrElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard) 数字签名的标准。 DSA是一种更...

    hi,大家好,我是开发者FTD。今天我们来介绍一下非对称加密算法中的DSA算法。

    DSA 算法简介

    DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard) 数字签名的标准。

    DSA是一种更高级的验证方式,它是一种公开密钥算法,不能用来加密数据,一般用于数字签名和认证。DSA 不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名。在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性,包括数据的完整性以及数据发送者的身份。如果数据和签名不匹配则认为验证失败!数字签名的作用就是校验数据在传输过程中不被修改。

    DSA数字签名可以理解为是单向加密的升级,不仅校验数据完整性,还校验发送者身份,同时还由于使用了非对称的密钥来保证密钥的安全,所以相比消息摘要算法更安全。

    DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多。

    DSA 算法签名过程

    在这里插入图片描述

    1. 使用消息摘要算法将要发送数据加密生成信息摘要。
    2. 发送方用自己的DSA私钥对信息摘要再加密,形成数字签名。
    3. 将原报文和加密后的数字签名一并通过互联网传给接收方。
    4. 接收方用发送方的公钥对数字签名进行解密,同时对收到的数据用消息摘要算法产生同一信息摘要。
    5. 将解密后的信息摘要和收到的数据在接收方重新加密产生的摘要进行比对校验,如果两者一致,则说明在传送过程中信息没有破坏和篡改;否则,则说明信息已经失去安全性和保密性。

    DSA 算法原理

    DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。

    DSA 算法参数定义
    • p:一个素模数,其值满足:2^(L-1) < p < 2^L,其中L是64的倍数,且满足512≤ L ≤ 1024
    • q:(p-1)的素因子,其值满足2^159 < q < 2^160,即q长度为160位。
    • g:g = powm(h,(p-1)/q,p)。h为满足1 < h < p-1 的任意整数,从而有powm(h,(p-1)/q,p) > 1
    • x:私钥。x为一个随机或伪随机生成的整数,其值满足 0 < x < q。
    • y:公钥。y = powm(g,x,p)

    注:

    1. 整数p,q,g可以公开,也可以仅由一组特定用户共享。
    2. 私钥x和公钥y称为一个密钥对(x,y),私钥只能由签名者本人独自持有,公钥则可以公开发布。密钥对可以在一段时间内持续使用。
    DSA 签名过程:
    1. 产生一个随机数k,其值满足 0 < k < q
    2. 计算r = powm(g,k,p) mod q,其值满足 r > 0
    3. 计算 s = (k^(-1)(SHA(M) + x * r)) mod q,其值满足 s > 0

    注:

    1. k^(-1) 表示整数k关于某个模数的逆元,并非指k的倒数。k在每次签名时都要重新生成,用于不要将同样的k用于进行其他的签名运算!

      • 逆元:满足(a * b) mod m = 1 的a 和 b 互为关于模数 m 的逆元,表示为 a = b^(-1) 或 b = a^(-1)。如(2 * 5) mod 3 = 1,则 2 和 5 互为模数 3 的逆元。
    2. SHA(M): M 的 hash 值,M为待签名的明文。SHA 是一个单向散列函数。DSS中选用SHA1算法,此时SHA(M) 为160 bits长的数字串,其满足不可逆和抗碰撞性。

    3. 最终的签名就是证书对(r, s),它们和 M 一起发送到验证方。

    4. 尽管 r 和 s 为 0 的概率相当小,但只要有任何一个为 0 ,必须重新生成 k,并重新计算 r 和 s 。

    DSA 验证签名过程:

    我们用(r’, s’, M’) 来表示验证方通过某种途径获得的签名结果,之所以这样表示是因为你不能保证你这个签名的结果一定是发送方生成的真签名相反有可能被人篡改过,甚至掉了包。为了描述简便,下面仍用(r, s, M) 代替(r’, s’, M’)。

    为了验证(r, s, M) 的签名是否确由发送方所签,验证方需要有(g, p, q, y),验证过程如下:

    1. 计算 w = s^(-1) mod q
    2. 计算 u1 = (SHA(M) * w) mod q
    3. 计算 u2 = (r * w) mod q
    4. 计算 v = (((g^u1) * (y^u2)) mod p ) mod q = ((g^u1 mod p) * (y^u2 mod p) mod p) mod q = (powm(g, u1, p) * powm(y, u2, p) mod p) mod q
    5. 若 v等于 r,则通过验证,否则验证失败

    注:

    1. 验证通过说明:签名(r, s) 有效,即(r, s, M) 确为发送方的真实签名结果,真实性可以高度信任,M未被篡改,为有效信息。
    2. 验证失败说明:签名(r, s) 无效,即(r, s, M) 不可靠,或者M被篡改过,或者签名是伪造的,或者M的签名有误,M为无效信息。

    DSA 算法实现

    DSA密钥生成:

    public static Map<String, Object> initKey(String seed) throws Exception {
        KeyPairGenerator keygen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        // 初始化随机产生器   
        SecureRandom secureRandom = new SecureRandom();
        secureRandom.setSeed(seed.getBytes());
        keygen.initialize(1024, secureRandom);
    
        KeyPair keys = keygen.genKeyPair();
    
        PublicKey publicKey = keys.getPublic();
        PrivateKey privateKey = keys.getPrivate();
    
        Map<String, Object> map = new HashMap<String, Object>(2);
        map.put(PUBLIC_KEY, publicKey);
        map.put(PRIVATE_KEY, privateKey);
    
        return map;
    }
    

    用私钥对信息生成数字签名:

    public static String sign(byte[] data, String privateKey) throws Exception {
        // 解密由base64编码的私钥   
        byte[] keyBytes = Base64.decodeBase64(privateKey);
    
        // 构造PKCS8EncodedKeySpec对象   
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
    
        // KEY_ALGORITHM 指定的加密算法   
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    
        // 取私钥匙对象   
        PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
    
        // 用私钥对信息生成数字签名   
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
        signature.initSign(priKey);
        signature.update(data);
    
        return Base64.encodeBase64String(signature.sign());
    }
    

    校验数字签名:

    public static boolean verify(byte[] data, String publicKey, String sign)
            throws Exception {
    
        // 解密由base64编码的公钥   
        byte[] keyBytes = Base64.decodeBase64(publicKey);
    
        // 构造X509EncodedKeySpec对象   
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
    
        // KEY_ALGORITHM 指定的加密算法   
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    
        // 取公钥匙对象   
        PublicKey pubKey = keyFactory.generatePublic(keySpec);
    
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
        signature.initVerify(pubKey);
        signature.update(data);
    
        // 验证签名是否正常   
        return signature.verify(Base64.decodeBase64(sign));
    }
    

    查看完整代码请访问:

    https://github.com/ForTheDevelopers/JavaSecurity

    总结

    DSA 算法应该属于数字签名届的翘楚了,非对称密钥大大增强了算法的安全性,目前已经被广泛应用到数字签名领域。

    创作不易,如果大家喜欢本文,欢迎点赞,转发,你的关注是我们继续前进的动力_

    com/ForTheDevelopers/JavaSecurity)

    总结

    DSA 算法应该属于数字签名届的翘楚了,非对称密钥大大增强了算法的安全性,目前已经被广泛应用到数字签名领域。

    创作不易,如果大家喜欢本文,欢迎点赞,转发,你的关注是我们继续前进的动力_

    关于作者
    联系作者
    • 微信号:ForTheDeveloper

    • 公众号:ForTheDevelopers

    在这里插入图片描述

    展开全文
  • DSA-Digital Signature Algorithm 是SchnorrElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。...
    接下来我们介绍DSA数字签名,非对称加密的另一种实现。 
    DSA 
    DSA-Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名。如果数据和签名不匹配则认为验证失败!数字签名的作用就是校验数据在传输过程中不被修改。数字签名,是单向加密的升级! 

    1. 【密钥算法】Java加密技术(六)---DSA 数字签名算法 - 八月照相馆 - 八月照相馆
       
    2. 【密钥算法】Java加密技术(六)---DSA 数字签名算法 - 八月照相馆 - 八月照相馆
       

    通过java代码实现如下:Coder类见 Java加密技术(一) 
    Java代码 
    1. import java.security.Key;  
    2. import java.security.KeyFactory;  
    3. import java.security.KeyPair;  
    4. import java.security.KeyPairGenerator;  
    5. import java.security.PrivateKey;  
    6. import java.security.PublicKey;  
    7. import java.security.SecureRandom;  
    8. import java.security.Signature;  
    9. import java.security.interfaces.DSAPrivateKey;  
    10. import java.security.interfaces.DSAPublicKey;  
    11. import java.security.spec.PKCS8EncodedKeySpec;  
    12. import java.security.spec.X509EncodedKeySpec;  
    13. import java.util.HashMap;  
    14. import java.util.Map;  
    15.   
    16. /** 
    17.  * DSA安全编码组件 
    18.  *  
    19.  * @author 梁栋 
    20.  * @version 1.0 
    21.  * @since 1.0 
    22.  */  
    23. public abstract class DSACoder extends Coder {  
    24.   
    25.     public static final String ALGORITHM = "DSA";  
    26.   
    27.     /** 
    28.      * 默认密钥字节数 
    29.      *  
    30.      * <pre> 
    31.      * DSA  
    32.      * Default Keysize 1024   
    33.      * Keysize must be a multiple of 64, ranging from 512 to 1024 (inclusive). 
    34.      * </pre> 
    35.      */  
    36.     private static final int KEY_SIZE = 1024;  
    37.   
    38.     /** 
    39.      * 默认种子 
    40.      */  
    41.     private static final String DEFAULT_SEED = "0f22507a10bbddd07d8a3082122966e3";  
    42.   
    43.     private static final String PUBLIC_KEY = "DSAPublicKey";  
    44.     private static final String PRIVATE_KEY = "DSAPrivateKey";  
    45.   
    46.     /** 
    47.      * 用私钥对信息生成数字签名 
    48.      *  
    49.      * @param data 
    50.      *            加密数据 
    51.      * @param privateKey 
    52.      *            私钥 
    53.      *  
    54.      * @return 
    55.      * @throws Exception 
    56.      */  
    57.     public static String sign(byte[] data, String privateKey) throws Exception {  
    58.         // 解密由base64编码的私钥  
    59.         byte[] keyBytes = decryptBASE64(privateKey);  
    60.   
    61.         // 构造PKCS8EncodedKeySpec对象  
    62.         PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);  
    63.   
    64.         // KEY_ALGORITHM 指定的加密算法  
    65.         KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);  
    66.   
    67.         // 取私钥匙对象  
    68.         PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);  
    69.   
    70.         // 用私钥对信息生成数字签名  
    71.         Signature signature = Signature.getInstance(keyFactory.getAlgorithm());  
    72.         signature.initSign(priKey);  
    73.         signature.update(data);  
    74.   
    75.         return encryptBASE64(signature.sign());  
    76.     }  
    77.   
    78.     /** 
    79.      * 校验数字签名 
    80.      *  
    81.      * @param data 
    82.      *            加密数据 
    83.      * @param publicKey 
    84.      *            公钥 
    85.      * @param sign 
    86.      *            数字签名 
    87.      *  
    88.      * @return 校验成功返回true 失败返回false 
    89.      * @throws Exception 
    90.      *  
    91.      */  
    92.     public static boolean verify(byte[] data, String publicKey, String sign)  
    93.             throws Exception {  
    94.   
    95.         // 解密由base64编码的公钥  
    96.         byte[] keyBytes = decryptBASE64(publicKey);  
    97.   
    98.         // 构造X509EncodedKeySpec对象  
    99.         X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);  
    100.   
    101.         // ALGORITHM 指定的加密算法  
    102.         KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);  
    103.   
    104.         // 取公钥匙对象  
    105.         PublicKey pubKey = keyFactory.generatePublic(keySpec);  
    106.   
    107.         Signature signature = Signature.getInstance(keyFactory.getAlgorithm());  
    108.         signature.initVerify(pubKey);  
    109.         signature.update(data);  
    110.   
    111.         // 验证签名是否正常  
    112.         return signature.verify(decryptBASE64(sign));  
    113.     }  
    114.   
    115.     /** 
    116.      * 生成密钥 
    117.      *  
    118.      * @param seed 
    119.      *            种子 
    120.      * @return 密钥对象 
    121.      * @throws Exception 
    122.      */  
    123.     public static Map<String, Object> initKey(String seed) throws Exception {  
    124.         KeyPairGenerator keygen = KeyPairGenerator.getInstance(ALGORITHM);  
    125.         // 初始化随机产生器  
    126.         SecureRandom secureRandom = new SecureRandom();  
    127.         secureRandom.setSeed(seed.getBytes());  
    128.         keygen.initialize(KEY_SIZE, secureRandom);  
    129.   
    130.         KeyPair keys = keygen.genKeyPair();  
    131.   
    132.         DSAPublicKey publicKey = (DSAPublicKey) keys.getPublic();  
    133.         DSAPrivateKey privateKey = (DSAPrivateKey) keys.getPrivate();  
    134.   
    135.         Map<String, Object> map = new HashMap<String, Object>(2);  
    136.         map.put(PUBLIC_KEY, publicKey);  
    137.         map.put(PRIVATE_KEY, privateKey);  
    138.   
    139.         return map;  
    140.     }  
    141.   
    142.     /** 
    143.      * 默认生成密钥 
    144.      *  
    145.      * @return 密钥对象 
    146.      * @throws Exception 
    147.      */  
    148.     public static Map<String, Object> initKey() throws Exception {  
    149.         return initKey(DEFAULT_SEED);  
    150.     }  
    151.   
    152.     /** 
    153.      * 取得私钥 
    154.      *  
    155.      * @param keyMap 
    156.      * @return 
    157.      * @throws Exception 
    158.      */  
    159.     public static String getPrivateKey(Map<String, Object> keyMap)  
    160.             throws Exception {  
    161.         Key key = (Key) keyMap.get(PRIVATE_KEY);  
    162.   
    163.         return encryptBASE64(key.getEncoded());  
    164.     }  
    165.   
    166.     /** 
    167.      * 取得公钥 
    168.      *  
    169.      * @param keyMap 
    170.      * @return 
    171.      * @throws Exception 
    172.      */  
    173.     public static String getPublicKey(Map<String, Object> keyMap)  
    174.             throws Exception {  
    175.         Key key = (Key) keyMap.get(PUBLIC_KEY);  
    176.   
    177.         return encryptBASE64(key.getEncoded());  
    178.     }  
    179. }  


    再给出一个测试类: 
    Java代码 
    1. import static org.junit.Assert.*;  
    2.   
    3. import java.util.Map;  
    4.   
    5. import org.junit.Test;  
    6.   
    7. /** 
    8.  *  
    9.  * @author 梁栋 
    10.  * @version 1.0 
    11.  * @since 1.0 
    12.  */  
    13. public class DSACoderTest {  
    14.   
    15.     @Test  
    16.     public void test() throws Exception {  
    17.         String inputStr = "abc";  
    18.         byte[] data = inputStr.getBytes();  
    19.   
    20.         // 构建密钥  
    21.         Map<String, Object> keyMap = DSACoder.initKey();  
    22.   
    23.         // 获得密钥  
    24.         String publicKey = DSACoder.getPublicKey(keyMap);  
    25.         String privateKey = DSACoder.getPrivateKey(keyMap);  
    26.   
    27.         System.err.println("公钥:\r" + publicKey);  
    28.         System.err.println("私钥:\r" + privateKey);  
    29.   
    30.         // 产生签名  
    31.         String sign = DSACoder.sign(data, privateKey);  
    32.         System.err.println("签名:\r" + sign);  
    33.   
    34.         // 验证签名  
    35.         boolean status = DSACoder.verify(data, publicKey, sign);  
    36.         System.err.println("状态:\r" + status);  
    37.         assertTrue(status);  
    38.   
    39.     }  
    40.   
    41. }  

    控制台输出: 
    Console代码 
    1. 公钥:  
    2. MIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZp  
    3. RV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fn  
    4. xqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuE  
    5. C/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJ  
    6. FnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImo  
    7. g9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAIu4RUlcQLp49PI0MrbssOY+3uySVnp0TULSv  
    8. 5T4VaHoKzsLHgGTrwOvsGA+V3yCNl2WDu3D84bSLF7liTWgOj+SMOEaPk4VyRTlLXZWGPsf1Mfd9  
    9. 21XAbMeVyKDSHHVGbMjBScajf3bXooYQMlyoHiOt/WrCo+mv7efstMM0PGo=  
    10.   
    11. 私钥:  
    12. MIIBTAIBADCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2  
    13. USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4  
    14. O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmC  
    15. ouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCB  
    16. gLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhR  
    17. kImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoEFwIVAIegLUtmm2oQKQJTOiLugHTSjl/q  
    18.   
    19. 签名:  
    20. MC0CFQCMg0J/uZmF8GuRpr3TNq48w60nDwIUJCyYNah+HtbU6NcQfy8Ac6LeLQs=  
    21.   
    22. 状态:  
    23. true  
    展开全文
  • 数字签名算法DSA

    2019-09-16 10:55:31
    一、概述 1、DSA是以RSA为基础形成的 2、java6提供了DSA的实现,但是java6只提供了SHA1withDSA的实现 3、bouncycastle扩展提供了其他的DSA实现方式 ...这个RSA一样,只是换了一个算法而已 ...
  • JS版SM2国密算法签名验证

    万次阅读 2014-08-06 10:49:13
    前段时间因工作需要,了解到在Github上已经有人实现了用JavaScript来写签名和验签,支持RSA、ECC、DSA等算法,还能解析X.509证书,一时觉得JavaScript是无比强大。后面就研究了下JavaScript版的ECC算法签名验证,...
  • 本周我们将介绍DSA、Schnorr和RSA-FDH的密钥生成、签名和验证算法。 1.DSA 2.Schnorr 3.RSA-FDH Reference [1] http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf [2] ...
  • DSA数字签名

    2010-11-25 23:21:48
     DSA-Digital Signature Algorithm 是SchnorrElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名...
  • 什么是数字签名算法(DSA)

    千次阅读 2014-08-26 22:56:27
    DSA(Digital Signature Algorithm,...它也可用于由第三方去确定签名和所签数据的真实性。DSA算法的安全性基于解离散对数的困难性,这类签字标准具有较大的兼容性和适用性,成为网络安全体系的基本构件之一。 p
  • RSA,DSA算法应用组件

    2012-04-10 17:04:50
    RSA加密组件,DSA数字签名组件,应用代码,以下代码将RSA和DSA融合在了一起,有注释,可以方便大家在做一些安全程序时的加密及验证组件。JAVA提供了大数类可以方便我们自己实现RSA密码算法,不过做应用的话就用JDK...
  • 数字签名流程 (1)生成签名:对源文件的「数字摘要」,使用...概念:带有「公钥」「私钥」的「消息摘要」算法,是「非对称加密算法「消息摘要」算法的结合体 私钥签名,公钥验证 常用签名算法 R
  • DSA算法(Digital Signature Algorithm,数据签名算法) DSA  Digital Signature Algorithm (DSA)是SchnorrElGamal签名算法的变种,被美国NIST作为DSfS(DigitalSignature Standard)。  简单的说,这是一种...
  • DSA加密算法以及破解

    千次阅读 2018-12-23 00:48:57
    DSA DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。 DSA是基于整数有限域离散对数难题的。 DSA是一种更高级的验证方式。...在DSA数字签名和...
  • DSA-Digital Signature Algorithm 是SchnorrElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。...
  • DSADSA-Digital Signature Algorithm 是SchnorrElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 153
精华内容 61
关键字:

dsa算法签名和验证