Esempio n. 1
0
        internal virtual CipherPadding CreateCipherPadding()
        {
            // TODO: Instantiate an appropriate concrete class.
            CipherPadding target = null;

            return(target);
        }
Esempio n. 2
0
        [Ignore] // placeholder for actual test
        public void TwofishCipherConstructorTest()
        {
            byte[]        key     = null; // TODO: Initialize to an appropriate value
            CipherMode    mode    = null; // TODO: Initialize to an appropriate value
            CipherPadding padding = null; // TODO: Initialize to an appropriate value
            TwofishCipher target  = new TwofishCipher(key, mode, padding);

            Assert.Inconclusive("TODO: Implement code to verify target");
        }
Esempio n. 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BlockCipher"/> class.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="blockSize">Size of the block.</param>
        /// <param name="mode">Cipher mode.</param>
        /// <param name="padding">Cipher padding.</param>
        /// <exception cref="ArgumentNullException"><paramref name="key"/> is null.</exception>
        protected BlockCipher(byte[] key, int blockSize, CipherMode mode, CipherPadding padding)
            : base(key)
        {
            this._blockSize = blockSize;
            this._mode      = mode;
            this._padding   = padding;

            this._mode.Init(this);
        }
Esempio n. 4
0
        public void PadTest()
        {
            CipherPadding target    = CreateCipherPadding(); // TODO: Initialize to an appropriate value
            int           blockSize = 0;                     // TODO: Initialize to an appropriate value

            byte[] input    = null;                          // TODO: Initialize to an appropriate value
            byte[] expected = null;                          // TODO: Initialize to an appropriate value
            byte[] actual;
            actual = target.Pad(blockSize, input);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }
Esempio n. 5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BlockCipher"/> class.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="blockSize">Size of the block.</param>
        /// <param name="mode">Cipher mode.</param>
        /// <param name="padding">Cipher padding.</param>
        /// <exception cref="ArgumentNullException"><paramref name="key"/> is null.</exception>
        protected BlockCipher(byte[] key, byte blockSize, CipherMode mode, CipherPadding padding)
            : base(key)
        {
            _blockSize = blockSize;
            _mode      = mode;
            _padding   = padding;

            if (_mode != null)
            {
                _mode.Init(this);
            }
        }
Esempio n. 6
0
        static PaddedBufferedBlockCipher MakeCipher(CipherMode cipher, CipherPadding padding)
        {
            var                 engine       = new T();
            IBlockCipher        blockCipher  = null;
            IBlockCipherPadding blockPadding = null;

            switch (cipher)
            {
            case CipherMode.CBC:
                blockCipher = new CbcBlockCipher(engine);
                break;
            }

            switch (padding)
            {
            case CipherPadding.ISO10126d2:
                blockPadding = new ISO10126d2Padding();
                break;

            case CipherPadding.ISO7816d4:
                blockPadding = new ISO7816d4Padding();
                break;

            case CipherPadding.PKCS7:
                blockPadding = new Pkcs7Padding();
                break;

            case CipherPadding.TBC:
                blockPadding = new TbcPadding();
                break;

            case CipherPadding.X923:
                blockPadding = new X923Padding();
                break;

            case CipherPadding.ZeroByte:
                blockPadding = new ZeroBytePadding();
                break;
            }

            return(new PaddedBufferedBlockCipher(blockCipher, blockPadding));
        }
Esempio n. 7
0
        [Ignore] // placeholder for actual test
        public void EncryptBlockTest()
        {
            byte[]        key     = null;                                  // TODO: Initialize to an appropriate value
            CipherMode    mode    = null;                                  // TODO: Initialize to an appropriate value
            CipherPadding padding = null;                                  // TODO: Initialize to an appropriate value
            TwofishCipher target  = new TwofishCipher(key, mode, padding); // TODO: Initialize to an appropriate value

            byte[] inputBuffer = null;                                     // TODO: Initialize to an appropriate value
            int    inputOffset = 0;                                        // TODO: Initialize to an appropriate value
            int    inputCount  = 0;                                        // TODO: Initialize to an appropriate value

            byte[] outputBuffer = null;                                    // TODO: Initialize to an appropriate value
            int    outputOffset = 0;                                       // TODO: Initialize to an appropriate value
            int    expected     = 0;                                       // TODO: Initialize to an appropriate value
            int    actual;

            actual = target.EncryptBlock(inputBuffer, inputOffset, inputCount, outputBuffer, outputOffset);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }
Esempio n. 8
0
 public Cipher(CipherMode mode, CipherPadding padding)
 {
     cipher  = MakeCipher(mode, padding);
     Mode    = mode;
     Padding = padding;
 }
        /// <summary>
        /// Rsa解密
        /// </summary>
        /// <param name="data">待解密的字节码</param>
        /// <param name="cipherMode">密码模式</param>
        /// <param name="cipherPadding">填充方式</param>
        /// <param name="isPublicKey">是否公钥</param>
        /// <param name="base64Key">BASE64编码的公钥</param>
        /// <returns>返回Rsa解密后的字节码</returns>
        public static byte[] RsaDecrypt(this byte[] data, bool isPublicKey, string base64Key, CipherMode cipherMode, CipherPadding cipherPadding)
        {
            ICipherParameters cipherParameters;

            if (isPublicKey)
            {
                cipherParameters = RSAUtilities.GetKeyParameterFormPrivateKey(base64Key);
            }
            else
            {
                cipherParameters = RSAUtilities.GetKeyParameterFormPublicKey(base64Key);
            }
            return(SecurityExtension.Encrypt(data, CipherAlgorithm.RSA, cipherMode, cipherPadding, cipherParameters));
        }
Esempio n. 10
0
 public BlockCipherStub(byte[] key, byte blockSize, CipherMode mode, CipherPadding padding) : base(key, blockSize, mode, padding)
 {
 }
Esempio n. 11
0
 /// <summary>
 /// 加密
 /// </summary>
 /// <param name="data">待加密的字节码</param>
 /// <param name="cipherAlgorithm">密码算法</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <param name="cipherParameters">加密参数</param>
 /// <returns>返回加密后的字节码</returns>
 internal static byte[] Encrypt(byte[] data, CipherAlgorithm cipherAlgorithm, CipherMode cipherMode, CipherPadding cipherPadding, ICipherParameters cipherParameters)
 {
     if (data.IsNullOrEmpty())
     {
         return(default);
        /// <summary>
        /// 使用公钥Rsa解密
        /// <para>
        /// 如果PKCS#8格式的公钥则使用 <see cref="RsaEncryptByPublicKey"/>
        /// </para>
        /// <para>
        /// 如果PKCS#1格式的公钥则使用 <see cref="RsaEncryptByAsn1PublicKey"/>
        /// </para>
        /// </summary>
        /// <param name="data">待解密的字节码</param>
        /// <param name="publicKey">PKCS#1的BASE64编码的公钥(BASE64编码)</param>
        /// <param name="cipherMode">密码模式</param>
        /// <param name="cipherPadding">填充方式</param>
        /// <returns>返回Rsa加密后的字节码</returns>
        public static byte[] RsaEncryptByAsn1PublicKey(this byte[] data, string publicKey, CipherMode cipherMode, CipherPadding cipherPadding)
        {
            var cipherParameters = RSAUtilities.GetPublicKeyParameterFormAsn1PublicKey(publicKey);

            return(SecurityExtension.Encrypt(data, CipherAlgorithm.RSA, cipherMode, cipherPadding, cipherParameters));
        }
 /// <summary>
 /// 使用私钥Rsa加密
 /// </summary>
 /// <param name="data">待加密的字节码</param>
 /// <param name="privateKey">BASE64编码的私钥</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <returns>返回Rsa加密后的字节码</returns>
 public static byte[] RsaEncryptByPrivateKey(this byte[] data, string privateKey, CipherMode cipherMode, CipherPadding cipherPadding)
 {
     return(RsaEncrypt(data, false, privateKey, cipherMode, cipherPadding));
 }
        /// <summary>
        /// 使用私钥Rsa解密
        /// </summary>
        /// <param name="data">待解密的字节码</param>
        /// <param name="privateKey">BASE64编码的私钥</param>
        /// <param name="cipherMode">密码模式</param>
        /// <param name="cipherPadding">填充方式</param>
        /// <returns>返回Rsa加密后的字节码</returns>
        public static byte[] RsaDecryptByPrivateKeyFromHex(this string data, string privateKey, CipherMode cipherMode, CipherPadding cipherPadding)
        {
            byte[] toEncryptArray = new byte[data.Length / 2];

            for (int i = 0; i < data.Length; i += 2)
            {
                toEncryptArray[i / 2] = Convert.ToByte(data.Substring(i, 2), 16);
            }
            return(RsaDecryptByPrivateKey(toEncryptArray, privateKey, cipherMode, cipherPadding));
        }
 /// <summary>
 /// 使用公钥Rsa加密
 /// <para>
 /// 如果PKCS#8格式的公钥则使用 <see cref="RsaEncryptByPublicKey"/>
 /// </para>
 /// <para>
 /// 如果PKCS#1格式的公钥则使用 <see cref="RsaEncryptByAsn1PublicKey"/>
 /// </para>
 /// </summary>
 /// <param name="data">待加密的字节码</param>
 /// <param name="publicKey">PKCS#8格式的公钥(BASE64编码)</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <returns>返回Rsa加密后的字节码</returns>
 public static byte[] RsaEncryptByPublicKey(this byte[] data, string publicKey, CipherMode cipherMode, CipherPadding cipherPadding)
 {
     return(RsaEncrypt(data, true, publicKey, cipherMode, cipherPadding));
 }
 /// <summary>
 /// 使用公钥Rsa解密
 /// </summary>
 /// <param name="data">待解密的字节码</param>
 /// <param name="publicKey">PKCS#1的BASE64编码的公钥</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <returns>返回Rsa加密后的字节码</returns>
 public static byte[] RsaDecryptByAsn1PublicKeyFromBase64(this string data, string publicKey, CipherMode cipherMode, CipherPadding cipherPadding)
 {
     byte[] toEncryptArray = Convert.FromBase64String(data);
     return(RsaDecryptByAsn1PublicKey(toEncryptArray, publicKey, cipherMode, cipherPadding));
 }
 /// <summary>
 /// 使用私钥Rsa解密
 /// </summary>
 /// <param name="data">待解密的字节码</param>
 /// <param name="privateKey">BASE64编码的私钥</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <returns>返回Rsa加密后的字节码</returns>
 public static byte[] RsaDecryptByPrivateKeyFromBase64(this string data, string privateKey, CipherMode cipherMode, CipherPadding cipherPadding)
 {
     byte[] toEncryptArray = Convert.FromBase64String(data);
     return(RsaDecrypt(toEncryptArray, false, privateKey, cipherMode, cipherPadding));
 }
Esempio n. 18
0
 public AES(CipherMode mode, CipherPadding padding) : base(mode, padding)
 {
 }
 /// <summary>
 /// 使用私钥Rsa加密并返回base64编码的字符
 /// <para>
 /// 如果PKCS#1格式的公钥则使用 <see cref="RsaEncryptByAsn1PublicKeyToHex"/>
 /// </para>
 /// <para>
 /// 如果PKCS#8格式的公钥则使用 <see cref="RsaEncryptByPublicKeyToHex"/>
 /// </para>
 /// </summary>
 /// <param name="data">待加密的字节码</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <param name="publicKey">BASE64编码的公钥</param>
 /// <returns>返回Rsa加密后的十六进制的字符</returns>
 public static string RsaEncryptByAsn1PublicKeyToHex(this byte[] data, string publicKey, CipherMode cipherMode, CipherPadding cipherPadding)
 {
     return(RsaEncryptByAsn1PublicKey(data, publicKey, cipherMode, cipherPadding)?.ToHexString());
 }
 /// <summary>
 /// Rsa加密并返回十六进制的字符
 /// </summary>
 /// <param name="data">待加密的字节码</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <param name="isPublicKey">是否公钥</param>
 /// <param name="base64Key">BASE64编码的公钥</param>
 /// <returns>返回Rsa加密后的十六进制的字符</returns>
 public static string RsaEncryptToHex(this string data, bool isPublicKey, string base64Key, CipherMode cipherMode, CipherPadding cipherPadding)
 {
     return(RsaEncryptToHex(data?.ToBytes(), isPublicKey, base64Key, cipherMode, cipherPadding));
 }
 /// <summary>
 /// Rsa加密并返回十六进制的字符
 /// </summary>
 /// <param name="data">待加密的字节码</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <param name="isPublicKey">是否公钥</param>
 /// <param name="base64Key">BASE64编码的公钥</param>
 /// <returns>返回Rsa加密后的十六进制的字符</returns>
 public static string RsaEncryptToHex(this byte[] data, bool isPublicKey, string base64Key, CipherMode cipherMode, CipherPadding cipherPadding)
 {
     return(RsaEncrypt(data, isPublicKey, base64Key, cipherMode, cipherPadding)?.ToHexString());
 }
 /// <summary>
 /// 使用私钥Rsa加密并返回base64编码的字符
 /// </summary>
 /// <param name="data">待加密的字节码</param>
 /// <param name="cipherMode">密码模式</param>
 /// <param name="cipherPadding">填充方式</param>
 /// <param name="privateKey">BASE64编码的私钥</param>
 /// <returns>返回Rsa加密后的base64编码的字符</returns>
 public static string RsaEncryptByPrivateKeyToBase64(this byte[] data, string privateKey, CipherMode cipherMode, CipherPadding cipherPadding)
 {
     return(RsaEncryptByPrivateKey(data, privateKey, cipherMode, cipherPadding)?.ToBase64String());
 }