`

java加解密及加解签

阅读更多

在上篇博文中介绍了获取公私钥的方法:http://cc-weige.iteye.com/blog/2381184。

本篇介绍加解密及加解签。

jdkapi提供了两个类javax.crypto.Cipher和java.security.Signature,这两个类是JCE框架的重要基础部分。

1:加密及解密的基本逻辑如下:

1:根据key的算法类型获取一个cipher实例
Cipher c = Cipher.getInstance(key.getA);
2:调用init方法初始化cipher
c.init(Cipher.ENCRYPT_MODE/Cipher.DECRYPT_MODE ,key)
3:调用doFinal方法执行加密或者解密
byte[] b = c.doFinal(data, begin, end);

 在使用RSA加解密是需要主要到RSA对待加解密的字段数组的长度限制。RSA支持的加密最大字节数:证书位数/8 -11;解密的最大字节数:证书位数/8 。

分段加解密如下:

byte[] encryAndDecry(Key key, byte[] data , int mode){       
                int encryptblock = 117 ;
		int decryptblock = 128 ;
		Cipher cipher = Cipher.getInstance(key.getAlgorithm());
		cipher.init(mode, key);
		int inputLen = data.length;
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		byte[] cache ;
		int offSet = 0;
		int i=0;
		int block = mode == 2 ? decryptblock : encryptblock ;
		while (inputLen - offSet > 0) {
			if (inputLen - offSet > block) {
				cache = cipher.doFinal(data, offSet, block);
			} else {
				cache = cipher.doFinal(data, offSet, inputLen - offSet);
			}
			out.write(cache, 0, cache.length);
			i++;
			offSet = i * block;
		}
		return out.toByteArray();
}

 

2:加解签使用的是Signature类中方法:sign()和verify(byte[] signature)

javadoc中给出的流程如下:

//签名
//get一个签名对象
Signature signature = Signature.getInstance("使用的算法");
//使用私钥key初始化签名对象,用于签名
signature.initSign(key);
//更新签名对象
signature.update(str.getBytes(charset));
//获取签名字节数组
byte[] by = signature.sign();


//解签byte[] sign
//get一个签名对象
Signature signature = Signature.getInstance("使用的算法");
//使用公钥key验证签名对象
signature.initVerify(key);
//更新签名对象
signature.update(data);
//解签sign ,返回一个boolean 值
signature.verify(sign)

 

 java的加解签只要使用的是Signature这个类的api。 

java8支持的加解签可以使用的算法有这些:

 private final static Map<String,Boolean> signatureInfo;

    static {
        signatureInfo = new ConcurrentHashMap<String,Boolean>();
        Boolean TRUE = Boolean.TRUE;
        // pre-initialize with values for our SignatureSpi implementations
        signatureInfo.put("sun.security.provider.DSA$RawDSA", TRUE);
        signatureInfo.put("sun.security.provider.DSA$SHA1withDSA", TRUE);
        signatureInfo.put("sun.security.rsa.RSASignature$MD2withRSA", TRUE);
        signatureInfo.put("sun.security.rsa.RSASignature$MD5withRSA", TRUE);
        signatureInfo.put("sun.security.rsa.RSASignature$SHA1withRSA", TRUE);
        signatureInfo.put("sun.security.rsa.RSASignature$SHA256withRSA", TRUE);
        signatureInfo.put("sun.security.rsa.RSASignature$SHA384withRSA", TRUE);
        signatureInfo.put("sun.security.rsa.RSASignature$SHA512withRSA", TRUE);
        signatureInfo.put("com.sun.net.ssl.internal.ssl.RSASignature", TRUE);
        signatureInfo.put("sun.security.pkcs11.P11Signature", TRUE);
    }

 

 

 

分享到:
评论

相关推荐

    PGP 加解密及签名验签示例

    **PGP 加解密及签名验签示例** PGP(Pretty Good Privacy)是一种广泛使用的加密软件,主要用于电子邮件、文件的加密以及数字签名。它基于公开密钥加密算法,如RSA和IDEA,确保数据在传输过程中的安全性和完整性。...

    C# 实现与JAVA互通 加签/验签,RSA加密/解密

    * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥...

    java Rsa公私钥加解签

    Rsa加解签,通过对方的公钥解密,用自己的私要加密

    ECC算法 C++实现 加解密

    ECC算法 C++实现 加解密 已经过测试

    C# 基于BouncyCastle.Crypto 1.8.10 实现国密算法,SM2,SM3,SM4(加签解签,加密解密)

    实现SM2加签与解签** SM2的签名和验证涉及到椭圆曲线操作。你需要创建一个私钥参数对象,然后使用`AsymmetricCipherKeyPairGenerator`生成密钥对,接着使用`SignerUtilities`进行签名和验证。 ```csharp // 生成...

    python实现RSA2签名解签.rar

    Python中的RSA算法是一种广泛使用的非对称加密技术,它基于两个不同的密钥——公钥和私钥,用于数据加密和解密以及数字签名。在给定的“python实现RSA2签名解签.rar”压缩包中,我们可以推断出它包含了关于如何在...

    sm2国密算法加解密、签名、验签QT工具源码(包含sm2,sm3和sm4源代码)

    sm2国密算法加解密,签名、验签QT工具的源代码(包含sm2,sm3和sm4源码)。 环境我使用的QT5.14的IDE编译,其他版本qt未测试。不过仅使用了几个简单控件应该关系不大。 详细介绍参见个人博客:SM2 (含SM3、SM4)国密...

    三山国王灵签老爷签文及批文解签诗-17页.pdf

    "三山国王灵签老爷签文及批文解签诗" 本资源为三山国王灵签老爷签文及批文解签诗,共计二十六号签文,每个签文都包含了具体的解签诗和注解。这些签文和解签诗都是根据古典文化和传统文化的精髓所编写的,旨在为读者...

    C#,JS,RSA生成私密钥并加密解密实例解析

    在IT领域,加密和解密是确保数据安全的重要手段,特别是在网络通信中。RSA是一种非对称加密算法,因其安全性和广泛的应用而被广大开发者所采用。本文将深入解析如何在C#和JavaScript环境中利用RSA生成私钥和公钥,并...

    RSA加解密、验解签区别

    是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。   二、RSA...

    Python下实现的RSA加密/解密及签名/验证功能示例

    本文实例讲述了Python下实现的RSA加密/解密及签名/验证功能。分享给大家供大家参考,具体如下: 原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, ...

    同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    RSA加密解密算法是一种非对称加密技术,广泛应用于网络安全领域,特别是在Web应用中保护敏感数据的安全传输。这种算法的特点是使用一对密钥,一把是公钥,另一把是私钥,公钥用于加密,私钥用于解密。因为公钥可以...

    微信小程序-微信小程序-RSA-签名-验签-加密-解密

    &gt; 一个适用于微信小程序的RSA签名库。 ...使用 1、引入文件 var RSA = require('../../utils/wxapp_rsa.js') 2、调用 var privateKey_pkcs1 = '-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQCk7WKdggwBOtteLL5sPom8...

    妈祖灵签解签全文,天后灵签解签.doc

    妈祖灵签解签全文,天后灵签解签.doc

    100灵签黄大仙灵签解签大全ACCESS数据库

    黄大仙灵签总共有一百支,按照吉凶可以分为下面五种:上上灵签三支、上吉灵签十二支、中吉灵签三十支、中平灵签三十七支、下下灵签十八支。黄大仙灵签每支签都有其特殊的意义。

    中国商业密钥国密算法Sm2 SM3 Sm4算法工具tool

    国密智能卡业内人士实战生产工具,保证可用好用.支持生成SM2密钥对,签名.解签,PBOC签名,PBOC解签,PBOC算哈希hash,SM3双哈希;Sm4的CBC加密解密,ECB加密解密,计算CBC的MAC,功能全面,性能可靠.

    java解析证书程序(认证功能).doc

    - 除了读取证书信息,我们还可以使用Java对证书进行签名、解签、导出和导入等操作。 - `keytool`是Java提供的一个命令行工具,用于管理密钥库和证书,包括生成自签名证书、导入和导出证书等。 总的来说,Java解析...

    中行PHP 签名验签demo

    3. 哈希比对:计算接收到的原始数据的SHA256哈希值,与解密后的哈希值进行对比。如果两者一致,证明数据在传输过程中未被修改,验签成功。 在"pkcs7_php"这个压缩包文件中,可能包含了实现这些功能的PHP代码示例,...

    文件的传输

    解签则是接收方使用发送方的公钥来解密这个签名,从而确认信息来自预期的发送方且未被修改。这种方式极大地增强了文件传输的安全性。 在Java框架中,处理MD5和RSA操作通常会用到`java.security`包下的类,如`...

    SCV Cryptomanger

    SCV Cryptomanger,可用于验证各种加解密算法、签名解签算法、哈希认证、密钥对生成及转换……编程小帮手啊~开发者一定是个大牛

Global site tag (gtag.js) - Google Analytics