import java.io.FileInputStream;
import java.io.IOException;
import java.security.*;
import java.security.cert.CertificateFactory;
import java.security.spec.EncodedKeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
public class Rsa001
{
public static void main(String[] args) throws Exception
{
Rsa001 rsa=new Rsa001();
KeyPair key=rsa.create();
byte[] pub=key.getPublic().getEncoded();
byte[] pri=key.getPrivate().getEncoded();
byte[] data="abc".getBytes();
byte[] sign=rsa.sign(data, pri);
boolean bl=rsa.check(sign, pub, data);
System.out.println("test --- "+bl);
}
public static KeyPair create() throws Exception{
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair keys = keyGen.generateKeyPair();
System.out.println( "create() okay " );
return keys;
}
public static byte[] sign(byte[] data,byte[] pri) throws Exception{
Signature sig = Signature.getInstance("MD5WithRSA");
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(pri);
PrivateKey privateKey2 = keyFactory.generatePrivate(privateKeySpec);
sig.initSign(privateKey2);
sig.update(data);
byte[] signature = sig.sign();
PrintHex(signature,signature.length);
System.out.println( "sign() oaky " );
return signature;
}
public static byte[] sign2(byte[] data,PrivateKey pri) throws Exception{
Signature sig = Signature.getInstance("MD5WithRSA");
sig.initSign(pri);
sig.update(data);
byte[] signature = sig.sign();
PrintHex(signature,signature.length);
System.out.println( "sign() oaky " );
return signature;
}
public static boolean check(byte[] sign,PublicKey pub,byte[] data) throws Exception{
Signature sig = Signature.getInstance("MD5WithRSA");
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
sig.initVerify(pub);
sig.update(data);
if (sig.verify(sign))
{
return true;
}
else
{
return false;
}
}
public static boolean check(byte[] sign,byte[] pub,byte[] data) throws Exception{
Signature sig = Signature.getInstance("MD5WithRSA");
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(pub);
PublicKey publicKey2 = keyFactory.generatePublic(publicKeySpec);
sig.initVerify(publicKey2);
sig.update(data);
if (sig.verify(sign))
{
return true;
}
else
{
return false;
}
}
public static void PrintHex(byte data[],int len)
{
int i;
int tmp;
String Tmp="";
for(i=0; i<len; i++)
{
if(i%16 == 0)
{
//System.out.println("");
if(i<0x10)
Tmp = "0x000";
if((i<0x100) && (i>=0x10))
Tmp = "0x00";
if((i>=0x100)&&(i<0x1000))
Tmp = "0x0";
if(i>=0x1000)
Tmp = "0x";
//System.out.print(Tmp+Integer.toHexString(i)+"h: ");
}
tmp = data[i];
if(tmp < 0)
tmp = 256 + tmp;
if(tmp <0x10)
System.out.print("0");
else
System.out.print("1");
}
System.out.println("");
}
public String encode(byte[] bytes){
return new sun.misc.BASE64Encoder().encode(bytes);
}
public byte[] decode(String str){
byte[] bt=null;
try{
sun.misc.BASE64Decoder decoder=new sun.misc.BASE64Decoder();
bt=decoder.decodeBuffer(str);
}catch(IOException e){
e.printStackTrace();
}
return bt;
}
}
分享到:
相关推荐
解决 java.lang.RuntimeException: Could not generate DH keypair异常处理。 bcprov-ext-jdk15on-1.60、bcprov-jdk15on-1.60两个包放到jre下的$JAVA_HOME/jre/lib/ext的路径下,然后配置$JAVA_HOME/jre/lib/...
"Could not generate DH keypair" 是一个在使用Diffie-Hellman密钥交换协议时常见的错误消息。这个错误通常出现在尝试建立安全连接,比如HTTPS、SSH或者FTP等使用公钥加密技术的应用中。Diffie-Hellman(DH)是一种...
当出现“Could not generate DH keypair”错误时,通常意味着Java运行时环境(JRE)无法生成所需的DH参数,这可能是由于默认的密钥长度不足或缺少必要的加密算法支持。 首先,我们需要理解为何会出现这种错误。Java...
1.解决jdk低版本向高版本发送请求失败 2.解决Could not generate DH keypair错误 3.不需要修改JDK配置 4.不需要向JDK中添加jar文件 5.向高版本服务器端发送https请求 6.有代码实例,完美运行 7.压缩包中附带使用说明
加密是报:javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair 此处提供 bcprov-ext-jdk15on-154.jar 和 bcprov-jdk15on-154.jar 压缩包中有使用说明
加密是报:javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair 此处提供 bcprov-ext-jdk15on-154.jar 和 bcprov-jdk15on-154.jar 压缩包中有使用说明
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PublicKey; import java.security.PrivateKey; import java.security.Security; import org.bouncycastle.jce....
首先,Java提供了`java.security`包来支持非对称加密,主要涉及`KeyPairGenerator`、`KeyPair`、`PublicKey`和`PrivateKey`等类。`KeyPairGenerator`用于生成密钥对,`KeyPair`存储公钥和私钥,而`PublicKey`和`...
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.RSAPrivateKeySpec; import java.security....
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; public class KeyGeneratorExample { public static void main(String[] args) { try {...
3. **生成KeyPair**:通过调用`generateKeyPair()`方法,我们可以得到一个包含公钥和私钥的KeyPair对象。 ```java KeyPair keyPair = keyGen.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); ...
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.SecureRandom; ``` 2. 初始化KeyPairGenerator实例,指定RSA算法,并设置密钥长度(通常为1024、2048或4096位): ``...
KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); ``` 以上就是生成密钥对的基本过程。在实际应用中,我们可能...
`KeyPair`对象包含了公钥和私钥,它们分别是`java.security.PublicKey`和`java.security.PrivateKey`的实例。我们可以通过调用`getPublic()`和`getPrivate()`方法来获取它们。 生成的密钥对可以存储在本地或者在...
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.Cipher; ``` 2. 初始化KeyPairGenerator,...
4. 生成KeyPair:调用`generateKeyPair()`方法,这将返回一个包含公钥和私钥的KeyPair对象。 ```java KeyPair keyPair = keyPairGenerator.generateKeyPair(); ``` 5. 获取公钥和私钥:从KeyPair对象中分别提取...
解决javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair异常所需jar包 也能解决由于https:URL时报的javax.imageio.IIOException: Can't get input stream from URL!出现的问题
KeyPair keyPair = keyGen.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); ``` 4. **加密与解密**:Java的`javax.crypto.Cipher`类用于进行...
KeyPair keys = keygen.genKeyPair(); PublicKey pubkey = keys.getPublic(); PrivateKey prikey = keys.getPrivate(); ``` 3. **转换密钥为字符串**: ```java String pubKey = bytesToHexStr(pubkey....
然而,当你遇到“javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair”的错误时,这意味着在建立SSL/TLS连接时,Diffie-Hellman(DH)密钥交换算法遇到了问题。DH是一种非对称...