中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

RSA非對稱加密解密Java實(shí)例代碼

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用
String content = "";
for(int i=1;i<100;i++)content += i + ") Easy to say, hard to do.\n";
 
/*1、利用公鑰加密至文件*/
{
    /*1)根據(jù)公鑰反向構(gòu)造PublickKey對象,調(diào)用cipher的init方法時使用*/
    String KEY_PUBLIC  = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIv38xXk06As11OCWq0IPQoQAmz20ZiE8T5KeaMTUbhzUkGNTAQygApua71R/INeEDNsyyQS4PT6EaWTjJop2rcCAwEAAQ==";
    X509EncodedKeySpec keySpec = new X509EncodedKeySpec(new BASE64Decoder().decodeBuffer(KEY_PUBLIC));
    PublicKey key = KeyFactory.getInstance("RSA").generatePublic(keySpec);
     
    Cipher cipher = Cipher.getInstance("RSA");//RSA/ECB/PKCS1PADDING
    cipher.init(Cipher.ENCRYPT_MODE, key);
 
    /*
     * 直接加密,因?yàn)閮?nèi)容太長將有異常,需要分塊加密
     * javax.crypto.IllegalBlockSizeException: Data must not be longer than 53 bytes
     * cipher.doFinal(content.getBytes());
     */
     
    /*2)分塊加密,與KeyPairGenerator.initialize(int keysize)有關(guān),本例使用的keysize為512*/
    int blockSize = 53;//cipher.getBlockSize()為0?根據(jù)異常提示設(shè)的53
    byte[] encryptByte = content.getBytes();
    //根據(jù)塊大小分塊,不足一塊的部分為一塊
    int blocksNum = (int)Math.ceil((1.0*encryptByte.length)/blockSize);
     
    FileOutputStream out = new FileOutputStream("license.lic");
    for (int i = 0; i < blocksNum; i++) {
        if (i < blocksNum - 1) {
            out.write(cipher.doFinal(encryptByte, i * blockSize, blockSize));
        } else {
            out.write(cipher.doFinal(encryptByte, i * blockSize, encryptByte.length - i * blockSize));
        }
    }
     
    out.close();
}
 
/*2、利用私鑰從文件解密*/
{
    /*1)根據(jù)私鑰反向構(gòu)造PrivateKey對象*/
    String KEY_PRIVATE = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAi/fzFeTToCzXU4JarQg9ChACbPbRmITxPkp5oxNRuHNSQY1MBDKACm5rvVH8g14QM2zLJBLg9PoRpZOMminatwIDAQABAkBqDAR7FBJbC15hgSQecV194D9WO3L18dOt9FNQgPSroGVYIvIizp1/wIHpMTN6uHwSoaZQcOqV33gxLF6fKbwxAiEAv390Q3X2cBjeScxhNbqPiOspE9rYD3eWSajN6Q7ud7UCIQC7HTUZelHMCpv4xPzg6e1QZkWhBfuqkhg9aOeAnIW0OwIgLW5Tat3FhXqg4ek29sQ34UfJCwjUUXcRlJATqcL9GDECIQChqe+JzrxDbVsrCY9vB83JLEO2hwPUcJtO24dBAHsopwIgEV547YcgZ+pyI1dnQhiLJiiFif+h1aBzaIH5mrkshtw=";
    PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(new BASE64Decoder().decodeBuffer(KEY_PRIVATE));
    PrivateKey key = KeyFactory.getInstance("RSA").generatePrivate(keySpec);
     
    Cipher cipher = Cipher.getInstance("RSA");//RSA/ECB/PKCS1PADDING
    cipher.init(Cipher.DECRYPT_MODE, key);
     
    /*2)分塊解密,根據(jù)每塊加密輸出大小確定*/
    FileInputStream cis = new FileInputStream("license.lic");
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    /*加密時分塊加密,加密輸出結(jié)果大小固定*/
    byte[] data = new byte[cipher.getOutputSize(cis.available())];
    int len = 0;
    while((len = cis.read(data)) > 0){
        bos.write(cipher.doFinal(data, 0, len));
    }
    cis.close();
     
    System.out.print(new String(bos.toByteArray()));
}

標(biāo)簽: dns

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Java 讀取漢字全拼簡寫

下一篇:Java中的定時器Timer使用示例代碼