关于ukey的操作,服务端加密,客户端解密

本文介绍了一个使用公钥进行加密的示例程序,并探讨了其与客户端页面加密结果不一致的问题。通过读取证书文件,利用Java语言实现了RSA算法对字符串进行加密的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想实现公钥加密,私钥解密,基于b/s的
客户端的都打包在1.rar压缩文件里面了,有一个显示页面,是同过js获取Ukey里面的的证书(准确的说是获取浏览器里面的信息),然后自己讲证书给导出来了放在了服务器上面,然后服务器端代码是
TestZs.java

import it.sauronsoftware.base64.Base64;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.PublicKey;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;

import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;


public class TestZs {
private static final Provider DEFAULT_PROVIDER = new BouncyCastleProvider();
private static final String ALGORITHOM = "RSA";
public static void main(String[] args) throws UnsupportedEncodingException {
File file=new File("d:\\cqcca1.cer");
FileInputStream inputstream=null;
X509Certificate zert=null;
try {
inputstream=new FileInputStream(file);
zert=X509Certificate.getInstance(inputstream);
encryptString(zert.getPublicKey(), "aaaaaa");
} catch (FileNotFoundException e) {
System.out.println("aaaaaa");
e.printStackTrace();
} catch (CertificateException e) {
System.out.println("zzzz");
e.printStackTrace();
} finally{
try {
inputstream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

public static String encryptString(PublicKey publicKey, String plaintext) {
if (publicKey == null || plaintext == null) {
return null;
}
byte[] data = plaintext.getBytes();
try {
byte[] en_data = encrypt(publicKey, data);
System.out.println("=====");
String aaa=new String(Base64.encode(en_data));
System.out.println(aaa);
System.out.println("=====");
return new String(Hex.encodeHex(en_data));
} catch (Exception ex) {

}
return null;
}

public static byte[] encrypt(PublicKey publicKey, byte[] data) throws Exception {
Cipher ci = Cipher.getInstance(ALGORITHOM, DEFAULT_PROVIDER);
ci.init(Cipher.ENCRYPT_MODE, publicKey);
return ci.doFinal(data);
}
}

这个证书就是从ukey里面导出来的,只有公钥信息,实现的是用公钥对字符串aaaaaa加密,但是对比那个客户端页面对aaaaaa加密的结果不一样,都是用的rsa加密,也都变成了base64编码,哪里出问题了?
======================================================= 目录 & 说明 ======================================================= ECCdemo 通过PKCS#11接口创建ECC密钥对,并进行签名和验签操作; ------------------------------------------------------- EnumObj 通过PKCS#11接口列举出Token中的各种对象,如证书,公钥,私钥,秘密密钥; ------------------------------------------------------- exportcert 通过PKCS#11接口输出Token中的证书的一些属性; ------------------------------------------------------- FormatKey 格式化Token,并重新划分公私有区大小,设置PIN码重试次数和密钥对数量。 ------------------------------------------------------- GetUSBInfos 通过PKCS#11接口获得slot, cryptoki, token的属性信息; ------------------------------------------------------- GuoMiTest 通过PKCS#11接口产生ssf33和scb2密钥,并进行加解密运算; ------------------------------------------------------- HMACTest 通过PKCS#11接口产生GENERIC SECRET密钥,并进行HMAC-SHA1功能验证; ------------------------------------------------------- InitToken 通过PKCS#11接口实现初始化操作,并进行Ansi和Utf8字符转换; ------------------------------------------------------- OTPDemo 通过PKCS#11接口产生HOTP密钥,并产生OTP结果; ------------------------------------------------------- PKCSDemo 通过PKCS#11接口创建RSA密钥对,并进行签名、加密、签名验证和解密的运算; ------------------------------------------------------- PKCStest 通过PKCS#11接口产生多种类型的密钥,如DES/3DES/RC2/RC4/RSA,并进行加解密运算; ------------------------------------------------------- 注:除Microsoft Visual C++外,你需要另外安装 Microsoft Platform SDK,并把SDK安装目录中的 include目录和lib目录分别放置在VC开发环境选项 (对于VC6来说,是菜单中Tools->Options...弹出的 对话框中的Directories页)中的目录(include) 和库(lib)中VC++的路径之前才能够正确编译链接运 行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值