数字签名:SHA256withRSA
示例:// 借用 RSA 生成公私秘钥
SHA256withRSA sha256withRSA = new SHA256withRSA();
Map<String, Object> keyPair = new RSA().createKeyPair();
sha256withRSA.setPublicKey((String) keyPair.get(RSA.PUBLIC_KEY_B64)).
setPrivateKey((String) keyPair.get(RSA.PRIVATE_KEY_B64));
String data = "啊啊啊";
String sign = sha256withRSA.signToBase64(data);
System.out.println("sign with SHA-256 digest: " + sign);
System.out.println("verify1: " + sha256withRSA.verify(data, sign));
byte[] signed = sha256withRSA.sign(data.getBytes(CHARSET));
System.out.println("verify2: " + sha256withRSA.verify(data.getBytes(CHARSET), signed));
sha256withRSA.setDigestAlgorithm(null);
sha256withRSA.setBase64Type(BASE64_TYPE_URLSAFE);
sign = sha256withRSA.signToBase64(data);
System.out.println("verify3: " + sha256withRSA.verify(data, sign));
System.out.println("sign without digest: " + sign);
sha256withRSA.setDigestAlgorithm(null);
sign = sha256withRSA.signToBase64(new FileInputStream("/dev/shm/ramdisk/plain.xls"));
System.out.println("verify4: " + sha256withRSA.verify(new FileInputStream("/dev/shm/ramdisk/plain.xls"), sign));
System.out.println("sign file: " + sign);
| Modifiers | Name | Description |
|---|---|---|
static String |
ALGORITHM_KEY |
|
static String |
ALGORITHM_SIGN |
|
static String |
BASE64_TYPE_MINE |
|
static String |
BASE64_TYPE_URLSAFE |
|
static java.nio.charset.Charset |
CHARSET |
| Type | Name and description |
|---|---|
java.security.PrivateKey |
getPrivateKey() |
java.security.PublicKey |
getPublicKey() |
static void |
main(String[] args) |
SHA256withRSA |
setBase64Type(String type)设置 Base64 的编解码器类型 |
SHA256withRSA |
setDigestAlgorithm(String algorithm)设置签名或者验证签名前的摘要算法,如 SHA-256,默认为空 |
SHA256withRSA |
setPrivateKey(String privateKey, String algorithm)设置 RSA 私钥 |
SHA256withRSA |
setPrivateKey(String privateKey)设置 RSA 私钥 |
SHA256withRSA |
setPrivateKey(java.security.PrivateKey privateKey)设置 RSA 私钥 |
SHA256withRSA |
setPublicKey(String publicKey, String algorithm)设置 RSA 公钥 |
SHA256withRSA |
setPublicKey(String publicKey)设置 RSA 公钥 |
SHA256withRSA |
setPublicKey(java.security.PublicKey publicKey)设置 RSA 公钥 |
byte[] |
sign(byte[] data)发送者对数据签名 |
byte[] |
sign(java.io.InputStream dataIs)签名 |
String |
signToBase64(byte[] data)签名 |
String |
signToBase64(java.io.InputStream dataIs)签名 |
String |
signToBase64(String data)对字符串类型的数据进行签名 |
boolean |
verify(byte[] data, byte[] signed)接收者验证签名 |
boolean |
verify(java.io.InputStream dataIs, byte[] signed)验证签名 |
boolean |
verify(String data, byte[] signed)验证字符串类型的数据的签名 |
boolean |
verify(byte[] data, String signed)验证签名 |
boolean |
verify(java.io.InputStream dataIs, String signed)验证签名 |
boolean |
verify(String data, String signed)验证字符串类型的数据的签名 |
| Methods inherited from class | Name |
|---|---|
class Object |
Object#wait(long, int), Object#wait(long), Object#wait(), Object#equals(Object), Object#toString(), Object#hashCode(), Object#getClass(), Object#notify(), Object#notifyAll() |
设置 Base64 的编解码器类型
type - 可选 BASE64_TYPE_URLSAFE、BASE64_TYPE_MINE、其他(默认)设置签名或者验证签名前的摘要算法,如 SHA-256,默认为空
algorithm - 摘要算法设置 RSA 私钥
privateKey - 使用 Base64 编码过的私钥algorithm - 解码私钥的算法,如 RSA设置 RSA 私钥
privateKey - Base64 编码的私钥设置 RSA 私钥
privateKey - 私钥设置 RSA 公钥
publicKey - 使用 Base64 编码过的公钥algorithm - 解码公钥的算法,如 RSA设置 RSA 公钥
publicKey - Base64 编码的公钥设置 RSA 公钥
publicKey - 公钥发送者对数据签名
1、使用消息摘要算法(如 setDigestAlgorithm('SHA-256'),默认为空跳过本步骤)对原数据 data 进行加密后生成摘要
2、使用私钥对摘要数据执行签名操作,生成签名并返回
data - 需要签名的原始数据签名
dataIs - 需要签名的原始数据流签名
data - 需要签名的原始数据签名
dataIs - 需要签名的原始数据流对字符串类型的数据进行签名
data - 需要签名的原始数据接收者验证签名
1、使用消息摘要算法(如 setDigestAlgorithm('SHA-256'),默认为空跳过本步骤)对原数据 data 进行加密后生成摘要
2、使用公钥对摘要数据执行签名操作,生成签名
3、将参数中的签名和步骤2中的签名比较,相同则返回 true,说明消息没有被篡改。
data - 需要验签的原始数据signed - 签名验证签名
dataIs - 需要验签的原始数据流signed - 签名验证字符串类型的数据的签名
data - 需要验签的原始数据signed - 签名验证签名
data - 需要验签的原始数据signed - 签名(Base64 编码)验证签名
dataIs - 需要验签的原始数据流signed - 签名(Base64 编码)验证字符串类型的数据的签名
data - 需要验签的原始数据signed - 签名(Base64 编码)