`
lobin
  • 浏览: 427472 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数字签名算法:DSA

 
阅读更多

 DSA

 

private static PrivateKey privateKey = null;
private static PublicKey publicKey = null;

@BeforeClass
public static void init() {
    KeyPairGenerator keyPairGenerator = null;
    try {
        keyPairGenerator = KeyPairGenerator.getInstance("DSA");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    keyPairGenerator.initialize(1024, new SecureRandom());
    KeyPair keyPair = keyPairGenerator.generateKeyPair();

    privateKey = keyPair.getPrivate(); // sun.security.ec.ECPrivateKeyImpl
    publicKey = keyPair.getPublic(); // sun.security.ec.ECPublicKeyImpl

    byte[] privateKeyEncoded = ((Key) privateKey).getEncoded();
    byte[] publicKeyEncoded = ((Key) publicKey).getEncoded();
    System.out.println("private key: " + Base64.byteArrayToBase64(privateKeyEncoded));
    System.out.println("public key: " + Base64.byteArrayToBase64(publicKeyEncoded));
}

 

@org.junit.Test
public void test() {
    String message = "13120983870";
//        String message = "13120983870222222222";
    System.out.println(message);

    KeyFactory keyFactory = null;
    try {
        keyFactory = KeyFactory.getInstance("DSA");
    } catch (NoSuchAlgorithmException e) {
        Assert.fail("no such algorithm: " + e.getMessage());
    }

    // 签名
    Signature signature = null;
    try {
        signature = Signature.getInstance("SHA256withDSA"); // NONEwithDSA, SHA256withDSA
    } catch (NoSuchAlgorithmException e) {
        Assert.fail("no such algorithm: " + e.getMessage());
    }
    try {
        signature.initSign(privateKey);
    } catch (InvalidKeyException e) {
        Assert.fail("invalid key: " + e.getMessage());
    }

    byte[] sign = null;
    try {
        signature.update(message.getBytes());
        sign = signature.sign();
    } catch (SignatureException e) {
        e.printStackTrace();
        Assert.fail("signature: " + e.getMessage());
    }
    System.out.println("signature: " + Base64.byteArrayToBase64(sign));

    // 验证
    try {
        signature.initVerify(publicKey);
    } catch (InvalidKeyException e) {
        Assert.fail("invalid key: " + e.getMessage());
    }

    try {
        signature.update(message.getBytes());
        boolean result = signature.verify(sign);
        Assert.assertTrue(result);
    } catch (SignatureException e) {
        Assert.fail("signature: " + e.getMessage());
    }
}

 

private key: MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoEFgIUWljb9g4BGWyIIwY9IbL2GbrrSeY=
public key: MIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAGWINaQe4sr9eIFMZk6TMkWxwufiClPTerjSH/KBpU86RDrzOALu+graaXFJdhM1G03CSnM7JItMzIzzLuosVMNj/FVxUSC/utLlAajdlQ3TNP2ZEtLFvBw8YKewUbfXoGCfGcbnPRcPBYpkoj3/lhIhg0u06na1ZFD/soH8JWEo=
13120983870
signature: MCwCFHSq4vK8GPOt+vyChr48ubF3YSCmAhRrIUKJHhpYhqKSJq81OV52g1wqvw==

 

DSA,使用EC生成的私钥签名,EC生成的公钥验证

 

private static PrivateKey privateKey = null;
private static PublicKey publicKey = null;

@BeforeClass
public static void init() {
    KeyPairGenerator keyPairGenerator = null;
    try {
        keyPairGenerator = KeyPairGenerator.getInstance("EC");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    keyPairGenerator.initialize(256, new SecureRandom());
    KeyPair keyPair = keyPairGenerator.generateKeyPair();

    privateKey = keyPair.getPrivate(); // sun.security.ec.ECPrivateKeyImpl
    publicKey = keyPair.getPublic(); // sun.security.ec.ECPublicKeyImpl

    byte[] privateKeyEncoded = ((Key) privateKey).getEncoded();
    byte[] publicKeyEncoded = ((Key) publicKey).getEncoded();
    System.out.println("private key: " + Base64.byteArrayToBase64(privateKeyEncoded));
    System.out.println("public key: " + Base64.byteArrayToBase64(publicKeyEncoded));
}

 

@org.junit.Test
public void test() {
    String message = "13120983870";
    System.out.println(message);

    KeyFactory keyFactory = null;
    try {
        keyFactory = KeyFactory.getInstance("EC");
    } catch (NoSuchAlgorithmException e) {
        Assert.fail("no such algorithm: " + e.getMessage());
    }

    // 签名
    Signature signature = null;
    try {
        signature = Signature.getInstance("NONEwithECDSA");
    } catch (NoSuchAlgorithmException e) {
        Assert.fail("no such algorithm: " + e.getMessage());
    }
    try {
        signature.initSign(privateKey);
    } catch (InvalidKeyException e) {
        Assert.fail("invalid key: " + e.getMessage());
    }

    byte[] sign = null;
    try {
        signature.update(message.getBytes());
        sign = signature.sign();
    } catch (SignatureException e) {
        Assert.fail("signature: " + e.getMessage());
    }
    System.out.println("signature: " + Base64.byteArrayToBase64(sign));

    // 验证
    try {
        signature.initVerify(publicKey);
    } catch (InvalidKeyException e) {
        Assert.fail("invalid key: " + e.getMessage());
    }

    try {
        signature.update(message.getBytes());
        boolean result = signature.verify(sign);
        Assert.assertTrue(result);
    } catch (SignatureException e) {
        Assert.fail("signature: " + e.getMessage());
    }
}

 

 

private key: MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCCo4Ko3RblXEVy85V4P1ODvLUOAXb2sKvtJmkOV5/HUHQ==
public key: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6NjtyqaRPShUnTn3OrM9CNnIxKHf3yWv4iFR/LPCcCTfnzGvIb3n/9REss3wjbeBNpZBFStPsYbY+iPWXA3ASw==
13120983870
signature: MEUCIQCse/HImkyfODAdG8Xz0CKc3MSwsLGjY7ObKnlrgMKudAIgWDXfeJ9I9OtwqUuzIDwc148M9gDCXVYikB+0OGNlvBw=

 

 

分享到:
评论

相关推荐

    实现数字签名算法(DSA),Hash算法的实现C语言

    1)利用C\C++语言实现DSA算法。 2)DSA中的Hash函数采用SHA算法。 (1)消息填充:因为我们存储的时候是以字节为单位存储的,所以消息的长度(单位:位)一定是 8 的倍数。而我们填充的时候也一定是 8 位、8 位...

    dsa数字签名算法的验证及实现

    在本主题中,我们将深入探讨“dsa(Digital Signature Algorithm,数字签名算法)”的验证和实现,这是一个广泛应用于电子商务、软件发布和其他需要安全通信场景的技术。 DSA是由美国国家安全局(NSA)设计,并在...

    java加密算法:Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法

    java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...

    DSA签名算法的C#实现

    DSA(Digital Signature Algorithm)是一种基于离散对数问题的公钥密码学算法,常用于数字签名,以确保数据的完整性和发送者的身份。在C#中实现DSA签名算法,主要涉及以下几个关键步骤和知识点: 1. **密钥生成**:...

    DSA.rar_DSA数字签名_DSA算法_dsa_java dsa_数字签名

    DSA,全称Digital Signature Algorithm,是一种基于离散对数问题的公钥密码体制,主要用于数字签名,确保数据的完整性和来源的不可抵赖性。在Java中实现DSA算法,可以帮助开发者构建安全的应用程序,保障网络通信的...

    DSA数字签名算法

    我不知道是这个DSA算法本身有问题还是什么.验证签名这块也有问题

    实验三 DSA数字签名算法.doc

    DSA 数字签名算法 数字签名是数据在公开行信道中传输的安全保障,能够实现数据的公开、公正、不可抵赖等特点的方法。DSA(Digital Signature Algorithm)是 Schnorr 和 ElGamal 算法的变种,被美国国家标准技术研究...

    无状态哈希基数字签名标准:NIST FIPS 205中的SLH-DSA算法详解

    内容概要:本文档介绍了美国国家标准与技术研究院(NIST)发布的无状态哈希基数字签名标准(FIPS 205),该标准定义了无状态哈希基数字签名算法(SLH-DSA)。SLH-DSA基于SPHINCS+算法,旨在提供抵抗大规模量子计算机攻击的...

    数字签名算法的研究与设计.docx

    为了评估本文数字签名算法的性能,我们进行了以下实验:签名长度:相较于 RSA、DSA 等算法,本文数字签名算法的签名长度更短,具有更好的性能。加密速度:在实验中,我们对比了不同算法的加密速度。结果发现,AES-...

    数字签名算法及其比较.docx

    3. DSA 算法:DSA 是一种基于离散对数问题的数字签名算法,安全性较高,但性能较低,实现复杂度较大。 在安全性方面,上述三种算法均已被证明是符合安全性的。RSA 算法在密钥长度较长时安全性较高,但随着量子...

    java 加解密算法,摘要算法和数字签名算法

    包含Base64 包含对称加密算法:DES,3DEA,AES,PBE 包含对称加密算法:DH,RAS,ElGamal 包含摘要算法:MD2,MD4...数字签名算法:RSA,DSA,ECDSA 详情请查看:http://blog.csdn.net/baidu_34012226/article/details/53331147

    数字签名 RSA算法 c++

    包涵三个RSA算法,c++是实现,数字签名的合集,三个独自的程序,可以独自编译运行,VC6.0下编译 包涵三个RSA算法,c++是实现,数字签名的合集,三个独自的程序,可以独自编译运行,VC6.0下编译

    dsa.rar_DSA C数字签名_DSA签名_dsa_dsa 数字签名_数字签名DSA

    总结,DSA数字签名算法是现代网络安全的重要组成部分,结合MD5或SHA-1等哈希函数,为数据提供了可靠的完整性保护和身份验证。在C语言环境中实现DSA签名,不仅需要理解算法原理,还需要熟悉文件操作和可能涉及的加密...

    Java实现的数字签名算法RSA完整示例

    常用的数字签名算法有RSA、DSA、ECDSA等。 RSA介绍 RSA是一种非对称加密算法,包括MD和SHA两类。RSA算法的安全性基于大数分解的困难性。RSA算法的优点是安全性高、速度快、易于实现。但是,RSA算法也存在一些缺点...

    DSA数字签名算法.pdf

    DSA数字签名算法 DSA(Digital Signature Algorithm,数字签名算法)是一种公开密钥算法,用作数字签名标准的一部分。它不能用作加密,只用作数字签名。DSA 使用公开密钥,为接受者验证数据的完整性和数据发送者的...

    椭圆曲线数字签名算法(ECDSA)中文版

    椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线对数字签名算法(DSA)的模拟,与普通的离散对数问题(discrete logarithm problem DLP)和大数分解问题(integer factorization problem IFP)不同,椭圆曲线离散对数...

    非对称加密算法 数字签名算法

    同时,文件中的`非对称加密算法 数字签名算法——RSA - 信息安全 - ITeye知识库频道_files`可能包含更多示例代码和详细解释,有助于进一步学习和实践。 总之,非对称加密算法和数字签名是保障网络通信安全的重要...

    rsa-elgamal-dsa.rar_DSA算法_ELGAMAL_dsa_dsa签名算法_elgamal java

    DSA是一种基于离散对数难题的数字签名算法,由美国国家安全局(NSA)设计,并在FIPS PUB 186中被标准化。它主要由两个部分组成:签名生成和签名验证。在Java中,`java.security.Signature`类提供了DSA签名功能,...

Global site tag (gtag.js) - Google Analytics