java代码签名

1、将要签名的类打包成jar

jar cvf friend.jar com/example/tools/security/Friend*.class


2、生成密钥对文件

keytool -genkey -alias friend -keypass friend4life -validity 1000 -keystore ijvmkeys


3、对jar文件进行签名

jarsigner -keystore ijvmkeys -storepass passwd00 -keypass friend4life friend.jar friend


E:\eclipse\j2ee\new-workspace\common-tools\bin>jar cvf friend.jar com/example/tools/security/Friend*.class


E:\eclipse\j2ee\new-workspace\common-tools\bin>keytool -genkey -alias friend -keypass friend4life -validity 1000 -keystore ijvmkeys
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
  [Unknown]:
您的组织单位名称是什么?
  [Unknown]:
您的组织名称是什么?
  [Unknown]:
您所在的城市或区域名称是什么?
  [Unknown]:
您所在的州或省份名称是什么?
  [Unknown]:
该单位的两字母国家代码是什么
  [Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正确吗?
  [否]:  y


E:\eclipse\j2ee\new-workspace\common-tools\bin>jarsigner -keystore ijvmkeys -storepass passwd00 -keypass friend4life friend.jar friend


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Bouncy Castle 实现的 Java SM2 签名代码示例: ```java import org.bouncycastle.crypto.AsymmetricCipherKeyPair; import org.bouncycastle.crypto.digests.SM3Digest; import org.bouncycastle.crypto.engines.SM2Engine; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.crypto.params.ParametersWithRandom; import org.bouncycastle.crypto.signers.SM2Signer; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.encoders.Hex; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.Security; import java.security.Signature; public class SM2SignerExample { public static void main(String[] args) throws Exception { Security.addProvider(new BouncyCastleProvider()); // 生成 SM2 密钥对 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC"); keyPairGenerator.initialize(256); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 待签名数据 byte[] message = "Hello, world!".getBytes(); // 计算摘要 SM3Digest digest = new SM3Digest(); digest.update(message, 0, message.length); byte[] hash = new byte[digest.getDigestSize()]; digest.doFinal(hash, 0); // 执行签名 AsymmetricCipherKeyPair keyPairBC = new AsymmetricCipherKeyPair( new ECPublicKeyParameters(((ECPrivateKeyParameters) keyPair.getPrivate()).getParameters().getG(), ((ECPrivateKeyParameters) keyPair.getPrivate()).getParameters()), (ECPrivateKeyParameters) keyPair.getPrivate()); SM2Signer signer = new SM2Signer(); ParametersWithRandom param = new ParametersWithRandom(keyPairBC.getPrivate()); signer.init(true, param); signer.update(hash, 0, hash.length); byte[] signature = signer.generateSignature(); // 输出签名结果 System.out.println("Signature: " + Hex.toHexString(signature)); // 验证签名 ECPublicKeyParameters publicKey = (ECPublicKeyParameters) keyPair.getPublic(); SM2Signer verifier = new SM2Signer(); verifier.init(false, publicKey); verifier.update(hash, 0, hash.length); boolean result = verifier.verifySignature(signature); // 输出验证结果 System.out.println("Verification result: " + result); } } ``` 该示例中使用了 Bouncy Castle 提供的 `SM2Signer` 类来进行签名和验证,同时使用了 `SM3Digest` 计算摘要。签名和验证的过程都需要使用密钥对,因此首先生成一个 SM2 密钥对。对于签名,需要先计算待签名数据的摘要,然后使用私钥进行签名,并将签名结果输出。对于验证,需要使用公钥进行验证,验证结果为 true 表示签名验证通过,否则表示签名验证不通过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值