某开发平台的注册机,花了我两个星期的时间才搞定,是什么平台自己去猜,我就不说了! String args = "";是原来的加密信息,有公司名称,只好取掉了。
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Security;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class rsaok {
private byte[] PrivateKey;
private byte[] PublicKey;
public static void main(String[] args) {
BouncyCastleProvider bouncycastleprovider = new BouncyCastleProvider();
if (Security.getProperty(bouncycastleprovider.getName()) == null)
Security.addProvider(bouncycastleprovider);
rsaok t = new rsaok();
t.key();
t.encrypt();
}
public void encrypt() {
String args = "";
byte abyte0[] = null;
Cipher cipher;
byte abyte1[];
int i;
ByteArrayOutputStream bytearrayoutputstream;
int k;
try {
PKCS8EncodedKeySpec pkcs8encodedkeyspec = new PKCS8EncodedKeySpec(
PrivateKey);
KeyFactory keyfactory = KeyFactory.getInstance("RSA");
java.security.PrivateKey privatekey = keyfactory
.generatePrivate(pkcs8encodedkeyspec);
cipher = Cipher.getInstance("RSA", "BC");
cipher.init(2, privatekey);
abyte1 = args.getBytes();
i = cipher.getBlockSize();
bytearrayoutputstream = new ByteArrayOutputStream();
for (k = 0; k < abyte1.length;) {
int j;
if (abyte1.length - k >= i)
j = i;
else
j = abyte1.length - k;
bytearrayoutputstream.write(cipher.doFinal(abyte1, k, j));
k += i;
}
bytearrayoutputstream.flush();
bytearrayoutputstream.close();
abyte0 = bytearrayoutputstream.toByteArray();
System.out.println(byte2hex(abyte0));
decrypt(abyte0);
} catch (Exception e) {
e.printStackTrace();
}
}
public void decrypt(byte[] abyte1) {
try {
String a = "323856EEAD0A7415283B7B58BDCDD6F58A0EB672E9A134C4923D1230D5E2F6B87CD2FAE30E2DB6CB50C60E3C7E91DD9D41938D63B28A0D6BE380EBFA748C99E81A4F983343D80C1541728B1259F49FDB4DCCAA62563AC3C14A91B6C7C374E7AE6B508D79487442B99390AF7C5A699A7040FB6FA7E9EF511003836C646ED45651";
X509EncodedKeySpec x509encodedkeyspec = new X509EncodedKeySpec(PublicKey);
//X509EncodedKeySpec x509encodedkeyspec = new X509EncodedKeySpec(hex2byte("30819F300D06092A864886F70D010101050003818D0030818902818100BE0C59D90E7A5A582626A209492452475130557AAE4400180BCB5B0E4138F8C8DED8185E51D17A5FF8B873084742CC245C6DC636432CBAA5401E5312EBA05A4AB79CB71C71A0E0221BB39DA9893026110447F9820B48C88B8A9862ABADB3E5462FADD45E3DD251658F48124C6AA091831404E52471A72A4D6CC989EA4959DECB0203010001"));
Cipher cipher;
int i;
ByteArrayOutputStream bytearrayoutputstream;
int k;
KeyFactory keyfactory = KeyFactory.getInstance("RSA");
java.security.PublicKey publickey = keyfactory
.generatePublic(x509encodedkeyspec);
cipher = Cipher.getInstance("RSA", "BC");
cipher.init(2, publickey);
i = cipher.getBlockSize();
bytearrayoutputstream = new ByteArrayOutputStream();
for (k = 0; k < abyte1.length;) {
int j;
if (abyte1.length - k >= i)
j = i;
else
j = abyte1.length - k;
bytearrayoutputstream.write(cipher.doFinal(abyte1, k, j));
k += i;
}
byte abyte0[];
bytearrayoutputstream.flush();
bytearrayoutputstream.close();
abyte0 = bytearrayoutputstream.toByteArray();
System.out.println(new String(abyte0));
} catch (Exception e) {
e.printStackTrace();
}
}
public void key() {
try {
KeyPairGenerator kpg = null;
kpg = KeyPairGenerator.getInstance("RSA", "BC");
kpg.initialize(1024);
KeyPair kp = kpg.generateKeyPair();
PrivateKey = kp.getPrivate().getEncoded();
System.out.println("PrivateKey:"+byte2hex(PrivateKey));
PublicKey = kp.getPublic().getEncoded();
System.out.println("PublicKey:"+byte2hex(PublicKey));
} catch (Exception e) {
e.printStackTrace();
}
}
private String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
if (n < b.length - 1)
hs = hs + ":";
}
return hs.toUpperCase();
}
public byte[] hex2byte(String hex) throws IllegalArgumentException {
if (hex.length() % 2 != 0) {
throw new IllegalArgumentException();
}
char[] arr = hex.toCharArray();
byte[] b = new byte[hex.length() / 2];
for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
String swap = "" + arr[i++] + arr[i];
int byteint = Integer.parseInt(swap, 16) & 0xFF;
b[j] = new Integer(byteint).byteValue();
}
return b;
}
}