亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? crsa.java

?? 說明: 1、里面有什么: 1.1、org.bouncycastle.*下的所有軟件是bouncycastle組織開發的軟件包 1.2、org.infosecurity.*下的軟件包括
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
            e.printStackTrace();
            return 0;
        }
    }
    // 最大輸入長度
    private int getInputBlockSize(boolean forEncryption)
    {
        int     bitSize = pukParam.getModulus().bitLength();

        if (forEncryption)
        {
            return (bitSize + 7) / 8 - 1;
        }
        else
        {
            return (bitSize + 7) / 8;
        }
    }
    // 最大的輸出長度
    private int getOutputBlockSize(boolean forEncryption)
    {
        int     bitSize =
        pukParam.getModulus().bitLength();
        if (forEncryption)
        {
            return (bitSize + 7) / 8;
        }
        else
        {
            return (bitSize + 7) / 8 - 1;
        }
    }
    // 密鑰對的生成
    public int generateKeyPair(int length)
    {
        BigInteger    p, q, n, d, e, pSub1, qSub1, phi;
        BigInteger    dP, dQ, qInv;

        int pbitlength = (length + 1) / 2;
        int qbitlength = (length- pbitlength);
        //e在標準中推薦使用3或65537
        e=new BigInteger("65537",10);

        //生成素數p,并且使p-1與e互素
        for (;;)
        {
            p = new BigInteger(pbitlength, 50,new SecureRandom());
            if (e.gcd(p.subtract(ONE)).equals(ONE)) break;
        }

        for (;;)
        {
            //生成素數q,并且使q-1與e互素,與p不相等
            for (;;)
            {
                q = new BigInteger(qbitlength,50,new SecureRandom());
                if (e.gcd(q.subtract(ONE)).equals(ONE) && !p.equals(q)) break;
            }

            //模數n=p*q
            n = p.multiply(q);

            if (n.bitLength() == length) break;
            p = p.max(q);
        }
        //pSub1=p-1
        //qSub1=q-1
        pSub1 = p.subtract(ONE);
        qSub1 = q.subtract(ONE);
        //計算(p-1)*(q-1)
        phi = pSub1.multiply(qSub1);

        //求私鑰指數d:  按公式d*e=n mod (p-1)(q-1)
        d = e.modInverse(phi);

        //應用中國剩余定理

        //求CRT指數:dQ=d mod (q-1)
        //求CRT指數:dP=d mod (p-1)
        dP = d.remainder(pSub1);
        dQ = d.remainder(qSub1);
        //1/q mod p0
        qInv = q.modInverse(p);
        pukParam=new RSAPublicKey(n, e);
        pvkParam=new RSAPrivateKey(n, e, d, p, q, dP, dQ, qInv);
        return 1;
    }
    public byte[] encode(byte[] H, int outLen,int mHLen)
        throws Exception
    {
        if (outLen < mTDefault.length + 10) {
            throw new Exception("encoding too short");
        }
        byte[] T = new byte[mTDefault.length];
        System.arraycopy(mTDefault,0,T,0,T.length);

        System.arraycopy(H,0,T,T.length - mHLen,mHLen);
        byte[] PS = new byte[outLen - T.length - 2];
        for (int i = 0; i < PS.length; i++) {
            PS[i] = (byte)0xFF;
        }
        // Create the output block, 01 || PS || 00 || T.
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            baos.write((byte)0x01);
            baos.write(PS);
            baos.write((byte)0x00);
            baos.write(T);
        } catch (IOException ioe) {
            // This should never happen
            ioe.printStackTrace();
        }

        byte[] EM = baos.toByteArray();
        return EM;
	}
    public byte[] decode(byte[] indata) throws Exception
    {
        if(indata.length<34)
            throw new Exception("消息格式不對.");
        if(indata[0]!=(byte)0x01)
        {
            throw new Exception("不是簽名的結果");
        }
        int start=0;
        int outLen=indata.length;
        while(indata[start]!=(byte)0x00)
        {
            start++;
            if(start>=outLen)
                throw new Exception("無效的填充數據!");
        }
        start++;          // 跳過0
        byte tm[]=new byte[outLen-start];
        try {
            System.arraycopy(indata,start,tm,0,tm.length);
        }
        catch (Exception ex) {
            return null;
        }
        return tm;
    }
    public RSAPublicKey getPublicKey()
    {
        return pukParam;
    }
    public RSAPrivateKey getPrivateKey()
    {
        return pvkParam;
    }
    /**
     * 將公鑰讀入
     * @author 張榮華
     */
    public RSAPublicKey readPuk(String strPukFileName)
            throws IOException
    {
        FileInputStream fis = new FileInputStream(strPukFileName);
        int fLength         = fis.available();
        byte[] bytePuk          = new byte[fLength];
        fis.read(bytePuk,0,fLength);
        fis.close();
        ByteArrayInputStream bIn = new ByteArrayInputStream(bytePuk);
        DERInputStream dIn = new DERInputStream(bIn);
        ASN1Sequence      seq = (ASN1Sequence)dIn.readObject();
        if(seq.size()==2)
        {
            DERInteger n = (DERInteger)seq.getObjectAt(0);
            DERInteger e = (DERInteger)seq.getObjectAt(1);
            return new RSAPublicKey(n.getValue(),e.getValue());
        }
        return null;
    }
    /**
     * 將公鑰寫入到文件(DER)編碼
     * @author 張榮華
     */
    public int writePuk(RSAPublicKey puk,String strPukFileName)
            throws IOException
    {
        ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
        DEROutputStream         dOut = new DEROutputStream(bOut);
        dOut.writeObject(puk.getDERObject());
        byte[] m_bPuk=bOut.toByteArray();
        dOut.close();
        FileOutputStream fos = new FileOutputStream(strPukFileName);
        fos.write(m_bPuk);
        fos.flush();
        fos.close();
        return 1;
    }
    /**
     * 將私鑰寫入到文件(DER編碼)
     * @author 張榮華
     */
    public int writePvk(RSAPrivateKey pvk,String strPvkFileName)
            throws IOException
    {
        ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
        DEROutputStream         dOut = new DEROutputStream(bOut);
        dOut.writeObject(pvk.getDERObject());
        byte[] m_bPvk=bOut.toByteArray();
        dOut.close();
        FileOutputStream fos = new FileOutputStream(strPvkFileName);
        fos.write(m_bPvk);
        fos.flush();
        fos.close();
        return 1;
    }
    /**
     * 從文件讀入公鑰
     * @author 張榮華
     */
    public RSAPrivateKey readPvk(String strPvkFileName)
            throws IOException
    {
        FileInputStream fis = new FileInputStream(strPvkFileName);
        int fLength         = fis.available();
        byte[] bytePvk          = new byte[fLength];
        fis.read(bytePvk,0,fLength);
        fis.close();
        ByteArrayInputStream bIn = new ByteArrayInputStream(bytePvk);
        DERInputStream dIn = new DERInputStream(bIn);
        ASN1Sequence      seq = (ASN1Sequence)dIn.readObject();
        if(seq.size()==9)
        {
            DERInteger n = (DERInteger)seq.getObjectAt(1);
            DERInteger e = (DERInteger)seq.getObjectAt(2);
            DERInteger d = (DERInteger)seq.getObjectAt(3);
            DERInteger p = (DERInteger)seq.getObjectAt(4);
            DERInteger q = (DERInteger)seq.getObjectAt(5);
            DERInteger dp = (DERInteger)seq.getObjectAt(6);
            DERInteger dq = (DERInteger)seq.getObjectAt(7);
            DERInteger qInv = (DERInteger)seq.getObjectAt(8);
            return new RSAPrivateKey(
                    n.getValue(),e.getValue(),d.getValue(),
                    p.getValue(),q.getValue(),dp.getValue(),
                    dq.getValue(),qInv.getValue());
        }
        return null;
    }
    /**
     * 以下是RSA算法的軟件實現測試程序
     * @author 張榮華
     */
    public static void main(String[] args) {
        CRsa rsa= new CRsa();

        // 密鑰生成測試
        // 密鑰長度支持512 768 1024 2048 4096 再長也支持,但怕你的機器受不了
        System.out.println("=====================密鑰生成測試======================");
        rsa.generateKeyPair(512);
        //rsa.savePukToFile("E:\\JavaProj\\temp\\puk.key");
        //rsa.savePvkToFile("E:\\JavaProj\\temp\\pvk.key");

        try {
            rsa.writePuk(rsa.getPublicKey(),"E:\\JavaProj\\temp\\puk.key");
            rsa.writePvk(rsa.getPrivateKey(),"E:\\JavaProj\\temp\\pvk.key");
//            rsa.readPuk("E:\\JavaProj\\temp\\puk.key");
//            rsa.readPvk("E:\\JavaProj\\temp\\pvk.key");
        }
        catch (IOException ex) {
        }
        System.out.println(rsa.getPublicKey().getModulus().toString(16));

        // 公鑰加密私鑰解密測試
        System.out.println("==================公鑰加密私鑰解密測試==================");
        String str="你好,張榮華!";
        byte[] indata=str.getBytes();
        int indatalen=indata.length;
        byte[] cipherData=null;
        byte[] plainData=null;
        try {
            cipherData=rsa.PublicKeyEncrypt(indata,indatalen);
        }
        catch (Exception ex) {
            //ex.printStackTrace();
        }
        try {
            plainData=rsa.PrivateKeyDecrypt(cipherData,cipherData.length);
        }
        catch (Exception ex) {
            //ex.printStackTrace();
        }
        System.out.println("解出的明文:\t"+new String(plainData));
        System.out.println("長度(字節)=\t"+plainData.length);
        // 數字簽名及簽名驗證測試
        System.out.println("==================數字簽名及簽名驗證測試==================");
        String strSign="這是一個簽名測試!";
        byte[] signRes=null;
        try {
            // MD5WithRSA
            signRes=rsa.signData(5,strSign.getBytes());
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
        try {
            int success=rsa.verifySignData(signRes,strSign.getBytes());
            if(success==1)
                System.out.println("簽名驗證成功!");
            else
                System.out.println("簽名驗證失敗!");
        }
        catch (Exception ex) {
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色欧美片视频在线观看| 色婷婷久久99综合精品jk白丝| 亚洲成人av一区二区三区| 亚洲日本va在线观看| 最新不卡av在线| 亚洲影视在线播放| 国产精品一二三在| 99久久精品情趣| 欧美一二三四在线| 中文字幕精品一区| 日本午夜精品视频在线观看| 国产成人丝袜美腿| 欧美日韩国产精品自在自线| 欧美日韩一区三区四区| 国产精品国产三级国产aⅴ无密码| 亚洲日韩欧美一区二区在线| 免费一级片91| 91成人在线精品| 国产精品久久久久婷婷| 丝袜脚交一区二区| 色综合天天狠狠| 久久综合狠狠综合久久综合88| 中文字幕一区二区5566日韩| 国产成人综合亚洲网站| 日韩精品一区国产麻豆| 偷拍亚洲欧洲综合| 色噜噜久久综合| 亚洲综合一区二区三区| 色偷偷88欧美精品久久久| 国产日韩欧美麻豆| 国产成人av电影在线观看| 日韩一区二区三区观看| 精品一区二区三区在线播放| 日韩亚洲欧美在线观看| 久久99热这里只有精品| 精品三级在线观看| 国产高清亚洲一区| 国产欧美视频一区二区| 成人黄色一级视频| 亚洲天天做日日做天天谢日日欢| 91小宝寻花一区二区三区| 国产精品久久久久9999吃药| 在线影视一区二区三区| 青草国产精品久久久久久| 久久免费看少妇高潮| 成人激情免费电影网址| 亚洲精品成人精品456| 欧美中文字幕一区| 国产精品亚洲成人| 日韩极品在线观看| 国产精品福利在线播放| 欧美电影在哪看比较好| 懂色av噜噜一区二区三区av| 一级做a爱片久久| 日韩美一区二区三区| 99精品视频在线观看| 免费精品视频最新在线| 亚洲欧美日韩久久精品| 久久久综合视频| 欧美日韩国产美| 91视频免费观看| 国产精品一区二区无线| 日产国产高清一区二区三区| 国产精品久久久久婷婷| 久久综合999| 日韩欧美第一区| 91国产成人在线| yourporn久久国产精品| 国内精品第一页| 麻豆91精品视频| 亚洲aⅴ怡春院| 亚洲成人av资源| 偷拍日韩校园综合在线| 亚洲视频一区二区免费在线观看| 91免费看片在线观看| 麻豆久久一区二区| 久久国产三级精品| 美腿丝袜亚洲一区| 五月天激情小说综合| 亚洲你懂的在线视频| 国产亚洲精品免费| 久久久99精品久久| 国产精品美女久久久久高潮| 中文字幕免费不卡| 亚洲日本护士毛茸茸| 亚洲一二三区视频在线观看| 一区二区久久久久久| 午夜视频一区二区| 久久精品99国产精品| 豆国产96在线|亚洲| 91首页免费视频| 欧美一级生活片| 日本一区二区视频在线| 国产精品麻豆视频| 日韩国产一区二| eeuss鲁片一区二区三区| 色婷婷国产精品综合在线观看| 6080午夜不卡| 国产精品女主播av| 日韩精品电影一区亚洲| 91亚洲精华国产精华精华液| 欧美一区二区三区在线视频 | 亚洲蜜臀av乱码久久精品| 亚洲无人区一区| 成人av资源在线| 久久综合久久99| 日韩精品亚洲专区| 在线观看免费亚洲| 综合电影一区二区三区| 激情综合一区二区三区| 9191成人精品久久| 一区二区三区在线看| 99久久精品费精品国产一区二区| 日韩午夜激情av| 日韩和的一区二区| 在线亚洲+欧美+日本专区| 亚洲人成网站精品片在线观看| 美女久久久精品| 欧美一级久久久久久久大片| 亚洲综合精品自拍| 欧美色中文字幕| 亚洲欧美日本在线| 色婷婷综合久久久中文一区二区| 国产精品久久久久久久久久久免费看 | 日本一区二区三级电影在线观看| 美女看a上一区| 精品国产免费视频| 国产精品一区二区在线播放| 精品88久久久久88久久久| 精品亚洲aⅴ乱码一区二区三区| 91精品国产免费| 韩国三级在线一区| 国产精品无圣光一区二区| 91香蕉视频污| 亚洲va欧美va人人爽午夜 | 亚洲成人av中文| 欧美不卡激情三级在线观看| 麻豆精品在线看| 国产精品妹子av| 欧美日韩另类一区| 国产一区二区精品在线观看| 国产精品电影院| 欧美日韩在线精品一区二区三区激情 | 久久国产精品99久久人人澡| 久久久精品黄色| 欧美精品丝袜久久久中文字幕| 国产又黄又大久久| 久久综合九色综合97婷婷| 久久精品国产亚洲一区二区三区| 中文久久乱码一区二区| 91精品午夜视频| heyzo一本久久综合| 欧美在线制服丝袜| 日韩电影在线观看网站| 国产欧美日韩在线视频| 色婷婷综合久久| www.欧美.com| 粉嫩绯色av一区二区在线观看| 五月婷婷久久丁香| 亚洲高清免费一级二级三级| www日韩大片| 日韩免费观看2025年上映的电影 | 亚洲一区在线电影| 国产精品国模大尺度视频| 欧美国产一区视频在线观看| 日韩美女天天操| 精品蜜桃在线看| 精品国产人成亚洲区| 欧美疯狂性受xxxxx喷水图片| 91国产丝袜在线播放| 色婷婷久久综合| 欧亚洲嫩模精品一区三区| 一本大道av一区二区在线播放| 韩国一区二区在线观看| 国产v日产∨综合v精品视频| 国产一区二区精品久久99| aaa欧美色吧激情视频| 一本高清dvd不卡在线观看| 一本久道久久综合中文字幕| 欧美日韩一二区| 日韩欧美一级二级三级久久久| 日韩免费福利电影在线观看| 国产欧美一区二区精品秋霞影院| 中文字幕二三区不卡| 亚洲色图欧美偷拍| 日本成人在线看| 北岛玲一区二区三区四区 | 亚洲国产视频在线| 国产曰批免费观看久久久| av一二三不卡影片| 欧美大胆一级视频| 国产精品视频免费看| 亚洲成av人影院| 国产91高潮流白浆在线麻豆| 在线亚洲精品福利网址导航| 久久久久久久久免费| 午夜精品免费在线观看| 99久久99久久久精品齐齐| 日韩欧美在线一区二区三区| 亚洲综合一区二区|