?????????飺

????RSA??????????????????????CFCA??????????????????RSA????????????????????????????????????????????????????????????????????????????????????????????????????????????RSA??????????????????????????????????????????????е???????????

????????RSA???????????????????????????????????±?

??????????÷????

?????? ????A??B??????????????A?????????

?????? A????????????????????????????????????????????????B??

?????? B?????????????A????????????????????????????????δ???????

?????? B????????????????????????????????????????????A??????????м??????????????????????????????

?????? A???B?????????????????????????????????????ɡ?

????????????????

????1?????????????????????????

/**
     * ?????  ????PrivateKey
     * @param path  ???????????·??
     * @param password  ?????????
     * @return ??????PrivateKey
     * @throws KeyStoreException
     * @throws NoSuchAlgorithmException
     * @throws CertificateException
     * @throws IOException
     * @throws UnrecoverableKeyException
     */
    private static PrivateKey getPrivateKey(String path??String password)
            throws KeyStoreException?? NoSuchAlgorithmException?? CertificateException??
            IOException?? UnrecoverableKeyException {
        KeyStore ks = KeyStore.getInstance("PKCS12");
        FileInputStream fis = new FileInputStream(path);
        char[] nPassword = null;
        if ((password == null) || password.trim().equals("")) {
            nPassword = null;
        } else {
            nPassword = password.toCharArray();
        }
        ks.load(fis?? nPassword);
        fis.close();
        Enumeration<String> en = ks.aliases();
        String keyAlias = null;
        if (en.hasMoreElements()) {
            keyAlias = (String) en.nextElement();
        }
 
        return (PrivateKey) ks.getKey(keyAlias?? nPassword);
    }


????2?????????????????????????????????????????????????′???

/**
     * ??????? ??????????£?BASE64(RSA(MD5(src)??privatekey))??????src????????????????
privatekey???????CFCA???????
     * @param plainText ??????????
     * @param path ?????·??
     * @param password  ?????????
     * @return ???????????????
     * @throws Exception
     */
    public static String sign(String plainText??String path??String password)
            throws Exception  {
        /*
         * MD5????
         */
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update(plainText.getBytes("utf-8"));
        byte[] digestBytes = md5.digest();
        /*
         * ??????????? RSA
         * Cipher???????????????????????RSA
         */
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        //ENCRYPT_MODE??????????
        cipher.init(Cipher.ENCRYPT_MODE?? getPrivateKey(path?? password));
        //????
        byte[] rsaBytes = cipher.doFinal(digestBytes);
        //Base64????
        return Base64.byteArrayToBase64(rsaBytes);