检验signature的java代码,Java Signature initSign()用法及代碼示例

initSign(PrivateKey privateKey)

java.security.Provider類的initSign()方法用於初始化此對象以進行簽名。如果使用不同的參數再次調用此方法,則該調用的效果無效。

用法:

public final void

initSign(PrivateKey privateKey)

throws InvalidKeyException

參數:此方法將身份的私鑰作為要生成其簽名的參數

Exception:如果 key 無效,則此方法引發InvalidKeyException。

下麵是說明initSign()方法的示例:

注意:以下程序將無法在在線IDE中運行

範例1:

// Java program to demonstrate

// initSign() method

import java.security.*;

import java.util.*;

import sun.misc.BASE64Encoder;

public class GFG1 {

public static void main(String[] argv) throws Exception

{

try {

// calling getKeyPair() method and assining in keypair

KeyPair keyPair = getKeyPair();

// creating byte array object

byte[] outbuff = new byte[1000];

// data to be updated

byte[] data = "test".getBytes("UTF8");

// creating the object of Signature

Signature sr = Signature.getInstance("SHA1WithRSA");

// initializing the signature object with key pair

// for signing

// Using method initSign

sr.initSign(keyPair.getPrivate());

// updating the data

sr.update(data);

// getting the signature byte

// of an signing operation

// by using method sign()

byte[] bytes = sr.sign();

// pritning the number of byte

System.out.println("Signature:" + Arrays.toString(bytes));

}

catch (NoSuchAlgorithmException e) {

System.out.println("Exception thrown:" + e);

}

catch (SignatureException e) {

System.out.println("Exception thrown:" + e);

}

}

// defining getKeyPair method

private static KeyPair getKeyPair() throws NoSuchAlgorithmException

{

// creating the object of KeyPairGenerator

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");

// initializing with 1024

kpg.initialize(1024);

// returning the key pairs

return kpg.genKeyPair();

}

}

輸出:

Signature:[-109, -21, 90, -114, -22,

....

....

...., 92, 1]

範例2:顯示InvalidKeyException

// Java program to demonstrate

// initSign() method

import java.security.*;

import java.util.*;

public class GFG1 {

public static void main(String[] argv) throws Exception

{

try {

// data to be updated

byte[] data = "test".getBytes("UTF8");

// creating the object of Signature

Signature sr = Signature.getInstance("SHA1WithRSA");

// initializing the signature object with key pair

// for signing

// Using method initSign

System.out.println("Trying to put null as private key ");

sr.initSign(null);

// updating the data

sr.update(data);

// getting the signature byte

// of an signing operation

// by using method sign()

byte[] bytes = sr.sign();

// pritning the number of byte

System.out.println("Signature:" + Arrays.toString(bytes));

}

catch (NoSuchAlgorithmException e) {

System.out.println("Exception thrown:" + e);

}

catch (SignatureException e) {

System.out.println("Exception thrown:" + e);

}

catch (InvalidKeyException e) {

System.out.println("Exception thrown:" + e);

}

}

}

輸出:

Trying to put null as private key

Exception thrown:java.security.InvalidKeyException:Key must not be null

initSign(PrivateKey privateKey, SecureRandom random)

java.security.Provider類的initSign()方法用於初始化此對象以進行簽名。如果使用不同的參數再次調用此方法,則該調用的效果無效。

用法:

public final void

initSign(PrivateKey privateKey, SecureRandom random)

throws InvalidKeyException

參數:此方法將以下參數作為參數:

privateKey-將要生成其簽名的身份的私鑰。

random-此簽名的隨機性來源。

異常:如果 key 無效,則此方法引發InvalidKeyException。

下麵是說明sign()方法的示例:

注意:以下程序將無法在在線IDE中運行

範例1:

// Java program to demonstrate

// sign() method

import java.security.*;

import java.util.*;

import sun.misc.BASE64Encoder;

public class GFG1 {

public static void main(String[] argv) throws Exception

{

try {

// calling getKeyPair() method and assining in keypair

KeyPair keyPair = getKeyPair();

// creating byte array object

byte[] outbuff = new byte[1000];

// data to be updated

byte[] data = "test".getBytes("UTF8");

// creating the object of Signature

Signature sr = Signature.getInstance("SHA1WithRSA");

// creating the object of SecureRandom

SecureRandom sb = SecureRandom.getInstance("SHA1PRNG");

// initializing the signature object with key pair

// for signing

sr.initSign(keyPair.getPrivate(), sb);

// updating the data

sr.update(data);

// getting the signature byte

// of an signing operation

// by using method sign()

byte[] bytes = sr.sign();

// pritning the number of byte

System.out.println("Signature:" + Arrays.toString(bytes));

}

catch (NoSuchAlgorithmException e) {

System.out.println("Exception thrown:" + e);

}

catch (SignatureException e) {

System.out.println("Exception thrown:" + e);

}

}

// defining getKeyPair method

private static KeyPair getKeyPair() throws NoSuchAlgorithmException

{

// creating the object of KeyPairGenerator

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");

// initializing with 1024

kpg.initialize(1024);

// returning the key pairs

return kpg.genKeyPair();

}

}

輸出:

Signature:[-121, -82, ....

....

....104, 114, -67]

範例2:顯示InvalidKeyException

// Java program to demonstrate

// initSign() method

import java.security.*;

import java.util.*;

public class GFG1 {

public static void main(String[] argv) throws Exception

{

try {

// creating byte array object

byte[] outbuff = new byte[1000];

// data to be updated

byte[] data = "test".getBytes("UTF8");

// creating the object of Signature

Signature sr = Signature.getInstance("SHA1WithRSA");

// creating the object of SecureRandom

SecureRandom sb = SecureRandom.getInstance("SHA1PRNG");

// initializing the signature object with null key pair

// for signing using initSign() method

System.out.println("Trying to put the null as key");

sr.initSign(null, sb);

// updating the data

sr.update(data);

// getting the signature byte

// of an signing operation

// by using method sign()

byte[] bytes = sr.sign();

// pritning the number of byte

System.out.println("Signature:" + Arrays.toString(bytes));

}

catch (NoSuchAlgorithmException e) {

System.out.println("Exception thrown:" + e);

}

catch (InvalidKeyException e) {

System.out.println("Exception thrown:" + e);

}

}

}

輸出:

Trying to put the null as key

Exception thrown:java.security.InvalidKeyException:Key must not be null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用Fisherman jce配合加密卡sm3加密的Java代码示例: ```java import cn.fisherman.security.sm.SM3Digest; import cn.fisherman.security.sm.SM3Key; import cn.fisherman.security.sm.SM3KeyGenerator; import cn.fisherman.security.sm.SM3ParameterSpec; import cn.fisherman.security.sm.SM3PrivateKey; import cn.fisherman.security.sm.SM3PublicKey; import cn.fisherman.security.sm.SM3Signature; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.Security; import java.security.Signature; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class SM3Test { public static void main(String[] args) throws Exception { Security.addProvider(new cn.fisherman.security.jce.provider.FishermanProvider()); // 生成SM3密钥对 SM3KeyGenerator keyGen = new SM3KeyGenerator(); SM3Key key = keyGen.generateKey(); SM3PrivateKey privateKey = key.getPrivate(); SM3PublicKey publicKey = key.getPublic(); // SM3加密 SM3Digest digest = new SM3Digest(); byte[] data = "Hello World!".getBytes(); digest.update(data, 0, data.length); byte[] result = new byte[digest.getDigestSize()]; digest.doFinal(result, 0); System.out.println("SM3加密结果:" + bytesToHex(result)); // SM3签名 SM3Signature signature = new SM3Signature(); signature.initSign(privateKey); signature.update(data, 0, data.length); byte[] sign = signature.sign(); System.out.println("SM3签名结果:" + bytesToHex(sign)); // SM3验签 signature.initVerify(publicKey); signature.update(data, 0, data.length); if (signature.verify(sign)) { System.out.println("SM3验签成功"); } else { System.out.println("SM3验签失败"); } // AES加密 byte[] keyBytes = "1234567890abcdef".getBytes(); byte[] ivBytes = "0123456789abcdef".getBytes(); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "FishermanJCE"); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); byte[] cipherText = cipher.doFinal(data); System.out.println("AES加密结果:" + bytesToHex(cipherText)); // AES解密 cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); byte[] plainText = cipher.doFinal(cipherText); System.out.println("AES解密结果:" + new String(plainText)); // RSA加密 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", "FishermanJCE"); keyPairGen.initialize(2048); KeyPair keyPair = keyPairGen.genKeyPair(); Cipher rsaCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "FishermanJCE"); rsaCipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic()); byte[] rsaCipherText = rsaCipher.doFinal(data); System.out.println("RSA加密结果:" + bytesToHex(rsaCipherText)); // RSA解密 rsaCipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate()); byte[] rsaPlainText = rsaCipher.doFinal(rsaCipherText); System.out.println("RSA解密结果:" + new String(rsaPlainText)); // 数字签名 Signature rsaSignature = Signature.getInstance("SHA256withRSA", "FishermanJCE"); rsaSignature.initSign(keyPair.getPrivate()); rsaSignature.update(data, 0, data.length); byte[] rsaSign = rsaSignature.sign(); System.out.println("RSA数字签名结果:" + bytesToHex(rsaSign)); // RSA验签 rsaSignature.initVerify(keyPair.getPublic()); rsaSignature.update(data, 0, data.length); if (rsaSignature.verify(rsaSign)) { System.out.println("RSA验签成功"); } else { System.out.println("RSA验签失败"); } } private static String bytesToHex(byte[] bytes) { StringBuilder builder = new StringBuilder(); for (byte b: bytes) { builder.append(String.format("%02x", b)); } return builder.toString(); } } ``` 注意,这里使用了Fisherman JCE提供的SM3实现,需要先导入Fisherman JCE的jar包。另外,加密卡的具体使用方式可能需要根据加密卡的具体型号和使用场景进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值