⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsoftlib.java

📁 进行与数字证书相关开发必须的java源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
            } else
            {
                iv = cbcParam.getIV();
                ivKey = new ParametersWithIV(key, iv);
                return Crypto.cipherEncode(11, isEncryption, ivKey, source_data);
            }

        case 306: 
            return Crypto.cipherEncode(8, isEncryption, key, source_data);

        case 307: 
            cbcParam = (CBCParam)mechanism.getParam();
            if(cbcParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
            } else
            {
                iv = cbcParam.getIV();
                ivKey = new ParametersWithIV(key, iv);
                return Crypto.cipherEncode(9, isEncryption, ivKey, source_data);
            }

        case 849: 
            return Crypto.cipherEncode(22, isEncryption, key, source_data);

        case 850: 
            cbcParam = (CBCParam)mechanism.getParam();
            if(cbcParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
            } else
            {
                iv = cbcParam.getIV();
                ivKey = new ParametersWithIV(key, iv);
                return Crypto.cipherEncode(23, isEncryption, ivKey, source_data);
            }

        case 801: 
            return Crypto.cipherEncode(28, isEncryption, key, source_data);

        case 802: 
            cbcParam = (CBCParam)mechanism.getParam();
            if(cbcParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
            } else
            {
                iv = cbcParam.getIV();
                ivKey = new ParametersWithIV(key, iv);
                return Crypto.cipherEncode(29, isEncryption, ivKey, source_data);
            }

        case 833: 
            return Crypto.cipherEncode(30, isEncryption, key, source_data);

        case 834: 
            cbcParam = (CBCParam)mechanism.getParam();
            if(cbcParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in CBC mod.");
            } else
            {
                iv = cbcParam.getIV();
                ivKey = new ParametersWithIV(key, iv);
                return Crypto.cipherEncode(31, isEncryption, key, source_data);
            }

        case 1: // '\001'
            return Crypto.RSAEncode(12, isEncryption, key, source_data);

        case -2147483632: 
            pbeEng = 16;
            pbeParam = (PBEParam)mechanism.getParam();
            if(pbeParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
            } else
            {
                iterations = pbeParam.getIterations();
                salt = pbeParam.getSalt();
                password = ((KeyParameter)key).getKey();
                ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
                return Crypto.cipherEncode(7, isEncryption, ivKey, source_data);
            }

        case -2147483631: 
            pbeEng = 15;
            pbeParam = (PBEParam)mechanism.getParam();
            if(pbeParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
            } else
            {
                iterations = pbeParam.getIterations();
                salt = pbeParam.getSalt();
                password = ((KeyParameter)key).getKey();
                ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
                return Crypto.cipherEncode(7, isEncryption, ivKey, source_data);
            }

        case -2147483630: 
            pbeEng = 17;
            pbeParam = (PBEParam)mechanism.getParam();
            if(pbeParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
            } else
            {
                iterations = pbeParam.getIterations();
                salt = pbeParam.getSalt();
                password = ((KeyParameter)key).getKey();
                ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
                return Crypto.cipherEncode(7, isEncryption, ivKey, source_data);
            }

        case -2147483629: 
            pbeEng = 16;
            pbeParam = (PBEParam)mechanism.getParam();
            if(pbeParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
            } else
            {
                iterations = pbeParam.getIterations();
                salt = pbeParam.getSalt();
                password = ((KeyParameter)key).getKey();
                ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
                return Crypto.cipherEncode(11, isEncryption, ivKey, source_data);
            }

        case -2147483628: 
            pbeEng = 15;
            pbeParam = (PBEParam)mechanism.getParam();
            if(pbeParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
            } else
            {
                iterations = pbeParam.getIterations();
                salt = pbeParam.getSalt();
                password = ((KeyParameter)key).getKey();
                ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
                return Crypto.cipherEncode(11, isEncryption, ivKey, source_data);
            }

        case -2147483627: 
            pbeEng = 17;
            pbeParam = (PBEParam)mechanism.getParam();
            if(pbeParam == null)
            {
                throw new Exception("JSoftLib: the MechanismParam must not be null in PBE mod.");
            } else
            {
                iterations = pbeParam.getIterations();
                salt = pbeParam.getSalt();
                password = ((KeyParameter)key).getKey();
                ivKey = Crypto.generatePKCS5Parameters(pbeEng, password, salt, iterations);
                return Crypto.cipherEncode(11, isEncryption, ivKey, source_data);
            }

        case 1026: 
            if(isEncryption)
                return eccEncrypt(key, source_data);
            else
                return eccDecrypt(key, source_data);
        }
        throw new Exception(String.valueOf(String.valueOf((new StringBuffer("JSoftLib: not support MechanismType:")).append(mType).append(" in Encryption/Decryption mod."))));
    }

    private boolean isEqualArray(byte a[], byte b[])
    {
        if(a.length != b.length)
            return false;
        for(int i = 0; i < a.length; i++)
            if(a[i] != b[i])
                return false;

        return true;
    }

    private AsymmetricCipherKeyPair generateECCKeyPair(int curveID)
        throws Exception
    {
        X9ECParameters x9Param = null;
        switch(curveID)
        {
        case 10001: 
            x9Param = X962NamedCurves.getByName("prime160v1");
            break;

        case 20001: 
            x9Param = X962NamedCurves.getByName("prime192v1");
            break;

        case 20003: 
            x9Param = X962NamedCurves.getByName("prime192v3");
            break;

        case 30001: 
            x9Param = X962NamedCurves.getByName("prime239v1");
            break;

        case 30002: 
            x9Param = X962NamedCurves.getByName("prime239v2");
            break;

        case 30003: 
            x9Param = X962NamedCurves.getByName("prime239v3");
            break;

        case 40001: 
            x9Param = X962NamedCurves.getByName("prime256v1");
            break;

        default:
            throw new Exception("not support ECC curve id:".concat(String.valueOf(String.valueOf(curveID))));
        }
        ECDomainParameters params = new ECDomainParameters(x9Param.getCurve(), x9Param.getG(), x9Param.getN());
        ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(params, new SecureRandom());
        ECKeyPairGenerator pGen = new ECKeyPairGenerator();
        pGen.init(genParam);
        return pGen.generateKeyPair();
    }

    private byte[] eccEncrypt(CipherParameters pubKey, byte sourceData[])
        throws Exception
    {
        ECPublicKeyParameters ecKey = (ECPublicKeyParameters)pubKey;
        ECDomainParameters ecdp = ecKey.getParameters();
        ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(ecdp, new SecureRandom());
        ECKeyPairGenerator pGen = new ECKeyPairGenerator();
        pGen.init(genParam);
        AsymmetricCipherKeyPair keyPair = pGen.generateKeyPair();
        IESEngine eng = new IESEngine(new ECDHBasicAgreement(), new KDF2BytesGenerator(new SHA1Digest()), new HMac(new SHA1Digest()));
        IESParameters p = new IESParameters(null, null, 160);
        eng.init(true, keyPair.getPrivate(), pubKey, p);
        byte out[] = eng.processBlock(sourceData, 0, sourceData.length);
        X9ECIESStructure x9stru = new X9ECIESStructure();
        x9stru.setQ(((ECPublicKeyParameters)keyPair.getPublic()).getQ());
        x9stru.setEncodedMessageAndMac(out);
        return x9stru.getOutputData();
    }

    private byte[] eccDecrypt(CipherParameters prvKey, byte data[])
        throws Exception
    {
        ECPrivateKeyParameters prk = (ECPrivateKeyParameters)prvKey;
        IESEngine eng = new IESEngine(new ECDHBasicAgreement(), new KDF2BytesGenerator(new SHA1Digest()), new HMac(new SHA1Digest()));
        IESParameters p = new IESParameters(null, null, 160);
        ECDomainParameters ecdp = ((ECKeyParameters)prvKey).getParameters();
        BigInteger tb = ecdp.getG().getX().toBigInteger();
        int keyLen = ((tb.bitLength() + 7) / 8) * 8;
        X9ECIESStructure x9stru = new X9ECIESStructure(data, keyLen, 20);
        byte Q[] = x9stru.getQ();
        byte encryptedData[] = x9stru.getEncodedMessageAndMac();
        ECPublicKeyParameters servPubKey = new ECPublicKeyParameters(ecdp.getCurve().decodePoint(Q), ecdp);
        eng.init(false, prvKey, servPubKey, p);
        byte out[] = eng.processBlock(encryptedData, 0, encryptedData.length);
        return out;
    }

    public byte[] sign_ex(Mechanism mechanism, JKey key, byte sourceData[])
        throws Exception
    {
        int mType = mechanism.getMechanismType();
        Mechanism digestM = null;
        switch(mType)
        {
        case 4: // '\004'
            digestM = new JMechanism(512);
            break;

        case 5: // '\005'
            digestM = new JMechanism(528);
            break;

        case 6: // '\006'
            digestM = new JMechanism(544);
            break;

        case 1027: 
            byte sig[] = sign(mechanism, key, sourceData);
            return Crypto.encodeECDSASignature(sig);

        default:
            throw new Exception(String.valueOf(String.valueOf((new StringBuffer("JSoftLib(sign_ex):not support MechanismType ")).append(mType).append(" in sign mod."))));
        }
        byte digestInfo[] = generateDigestInfo(digestM, sourceData);
        Mechanism cryptoM = new JMechanism(1);
        byte sig[] = encrypt(cryptoM, key, digestInfo);
        return sig;
    }

    public boolean verifySign_ex(Mechanism mechanism, JKey key, byte sourceData[], byte signData[])
    {
        boolean flag1;
        try
        {
            if(key.getKeyType() == 1)
            {
                Mechanism cryptoM = new JMechanism(1);
                byte digestInfo[] = decrypt(cryptoM, key, signData);
                ASN1Sequence seq = (ASN1Sequence)Parser.writeBytes2DERObj(digestInfo);
                AlgorithmIdentifier alg = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
                DERObjectIdentifier oid = alg.getObjectId();
                Mechanism digestM = null;
                if(oid.equals(PKCSObjectIdentifiers.md2))
                    digestM = new JMechanism(512);
                else
                if(oid.equals(PKCSObjectIdentifiers.md5))
                    digestM = new JMechanism(528);
                else
                if(oid.equals(PKCSObjectIdentifiers.sha1))
                {
                    digestM = new JMechanism(544);
                } else
                {
                    boolean flag3 = false;
                    return flag3;
                }
                byte myDigestInfo[] = generateDigestInfo(digestM, sourceData);
                boolean flag4 = isEqualArray(digestInfo, myDigestInfo);
                return flag4;
            }
            if(key.getKeyType() == 1001)
            {
                byte sig[] = Crypto.decodeECCSignature(signData);
                Mechanism signM = new JMechanism(1027);
                boolean flag2 = verifySign(signM, key, sourceData, sig);
                return flag2;
            } else
            {
                boolean flag = false;
                return flag;
            }
        }
        catch(Exception ex)
        {
            flag1 = false;
        }
        return flag1;
    }

    private byte[] generateDigestInfo(Mechanism digestM, byte data[])
        throws Exception
    {
        int mType = digestM.getMechanismType();
        AlgorithmIdentifier algId = null;
        if(mType == 512)
            algId = new AlgorithmIdentifier(PKCSObjectIdentifiers.md2, null);
        else
        if(mType == 528)
            algId = new AlgorithmIdentifier(PKCSObjectIdentifiers.md5, null);
        else
        if(mType == 544)
            algId = new AlgorithmIdentifier(PKCSObjectIdentifiers.sha1, null);
        else
            throw new Exception("JSoftLib(generateDigestInfo): Not Support MessageDigest Algorithm:".concat(String.valueOf(String.valueOf(digestM.getMechanismType()))));
        byte hashcode[] = digest(digestM, data);
        DEREncodableVector derV = new DEREncodableVector();
        DEROctetString derO = new DEROctetString(hashcode);
        derV.add(algId);
        derV.add(derO);
        DERSequence derS = new DERSequence(derV);
        return Parser.writeDERObj2Bytes(derS);
    }

    public boolean isSupport(int mechanismType)
    {
        for(int i = 0; i < SUPPORT_TYPE_LIST.length; i++)
            if(mechanismType == SUPPORT_TYPE_LIST[i])
                return true;

        return false;
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -