예제 #1
0
        ASN1Sequence decryptData(
            AlgorithmIdentifier algId,
            byte[]                data,
            char[]                password)
        {
            PKCS12PBEParams  pbeParams     = PKCS12PBEParams.getInstance(algId.getParameters());
            CipherParameters keyParameters = PBEUtil.generateCipherParameters(algId.getObjectId(), password, pbeParams);

            byte[] encoding = null;
            Object engine   = PBEUtil.createEngine(algId.getObjectId());

            if (engine is BufferedBlockCipher)
            {
                BufferedBlockCipher cipher = (BufferedBlockCipher)engine;

                cipher.init(false, keyParameters);

                int encLen = cipher.getOutputSize(data.Length);

                encoding = new byte[encLen];

                int off = cipher.processBytes(data, 0, data.Length, encoding, 0);

                cipher.doFinal(encoding, off);
            }
            else if (engine is StreamCipher)
            {
                StreamCipher cipher = (StreamCipher)engine;

                cipher.init(false, keyParameters);

                encoding = new byte[data.Length];

                cipher.processBytes(data, 0, data.Length, encoding, 0);
            }

            ASN1InputStream bIn = new ASN1InputStream(new MemoryStream(encoding));

            return((ASN1Sequence)bIn.readObject());
        }