由Java程式註冊機聯想到商業版程式的加密方法

來源:互聯網
上載者:User

某開發平台的註冊機,花了我兩個星期的時間才搞定,是什麼平台自己去猜,我就不說了! 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;
 }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.