首页 技术 正文
技术 2022年11月21日
0 收藏 880 点赞 4,567 浏览 16338 个字

  数字签名(又称公钥数字签名)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。关于数字签名的介绍,可以参见百度百科:http://baike.baidu.com/view/7626.htm。今天,我们就开始学习java中数字签名的使用。

项目结构如下:

aaarticlea/png;base64,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” alt=”” />

DSA算法

一、 HuhxDSA.java

package com.huhx.security;import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Hex;/**
* writer: huhx
*/
public class HuhxDSA {
private final static String src = "http://www.cnblogs.com/huhx"; public static void main(String[] args) {
// 初始化签名
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
DSAPublicKey dsaPublicKey = (DSAPublicKey) keyPair.getPublic();
DSAPrivateKey dsaPrivateKey = (DSAPrivateKey) keyPair.getPrivate(); // 执行签名
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Signature signature = Signature.getInstance("SHA1withDSA");
signature.initSign(privateKey);
signature.update(src.getBytes());
byte[] result = signature.sign();
System.out.println("jdk dsa sign: " + Hex.encodeHexString(result)); // 验证签名
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(dsaPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("DSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
signature = Signature.getInstance("SHA1withDSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());
boolean bool = signature.verify(result);
System.out.println("jdk dsa: " + bool); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

二、 运行结果如下:

jdk dsa sign: 302d0215009461ae45922c11159d3b6dc4c70eb0748763d23202146f5f9a5eedb36a760cf8b9b1d1d1fdc10636aafe
jdk dsa: true

RSA算法

一、 HuhxRSA.java

package com.huhx.security;import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Hex;/**
* writer: huhx
*/
public class HuhxRSA {
private final static String src = "http://www.cnblogs.com/huhx"; public static void main(String[] args) {
try {
// 初始化签名
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(512);
KeyPair keyPair = generator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); // 执行签名
PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(encodedKeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initSign(privateKey);
signature.update(src.getBytes());
byte[] result = signature.sign();
System.out.println("jdk rsa sign: " + Hex.encodeHexString(result)); // 验证签名
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
signature = Signature.getInstance("MD5withRSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());
boolean bool = signature.verify(result);
System.out.println("jdk rsa: " + bool);
} catch (Exception e) {
e.printStackTrace();
}
}
}

二、 运行结果如下:

jdk rsa sign: 564dc7f96c85a7a42e579ae191997c892f234272d220e3f062cf52071e827164fadd52720b69704979fc11810bdbf92b01dd3f5f26a621ffe699ef601d08fb6c
jdk rsa: true

ECDSA算法

一、 HuhxECDSA.java

package com.huhx.security;import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.ECPrivateKey;
import java.security.interfaces.ECPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Hex;/**
* writer: huhx
*/
public class HuhxECDSA {
private final static String src = "mhttp://www.cnblogs.com/huhx"; public static void main(String[] args) {
try {
// 初始化签名
KeyPairGenerator generator = KeyPairGenerator.getInstance("EC");
generator.initialize(256);
KeyPair keyPair = generator.generateKeyPair();
ECPublicKey ecPublicKey = (ECPublicKey) keyPair.getPublic();
ECPrivateKey ecPrivateKey = (ECPrivateKey) keyPair.getPrivate(); // 执行签名
PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(ecPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("EC");
PrivateKey privateKey = keyFactory.generatePrivate(encodedKeySpec);
Signature signature = Signature.getInstance("SHA1withECDSA");
signature.initSign(privateKey);
signature.update(src.getBytes());
byte[] result = signature.sign();
System.out.println("jdk ecdsa sign: " + Hex.encodeHexString(result)); // 验证签名
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ecPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("EC");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
signature = Signature.getInstance("SHA1withECDSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());
boolean bool = signature.verify(result);
System.out.println("jdk ecdsa: " + bool);
} catch (Exception e) {
e.printStackTrace();
}
}
}

二、 运行结果如下:

jdk ecdsa sign: 30460221009b80596c51ccdf19c5e8e825aca6d85e549a30ee72a1e9b094f7b3a8c8b9310902210098e8dcc6ea932142d8cd9dd80c08fff7359f796571f8a973d3ca6e2dc0931904
jdk ecdsa: true

友情链接

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849