Exemplo n.º 1
0
        /// <summary>
        /// 将 ByteArray 对象的缓冲区中 offset 参数指定位置开始的缓冲区数据复制到
        /// 起始于 dstOffset 参数指定位置的 dst 参数指定的缓冲区中(解密复制)
        /// </summary>
        /// <param name="dst">要复制到的目标缓冲区</param>
        /// <param name="dstOffset"> dst 中从零开始的字节偏移量</param>
        /// <param name="offset">当前ByteArray对象缓冲区从零开始的字节偏移量</param>
        /// <param name="crytor">加/解密器对象</param>
        /// <returns></returns>
        public virtual int CopyToDecryt(byte[] dst, int dstOffset, int offset, ICrytPackage crytor)
        {
            int len = Math.Min(dst.Length - dstOffset, dataLength - offset);

            if (len > 0)
            {
                for (int i = 0; i < len; i++)
                {
                    dst[dstOffset + i] = crytor.Decryt(m_buffer[offset + i]);
                }
            }
            else
            {
                len = 0;
            }

            refreshDataLength(offset + len);

            return(len);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 在 src 参数指定的缓冲区中,从 srcOffset 参数指定的位置开始将 count 参数指定的长度
        /// 复制到起始于 offset 参数指定位置的当前 ByteArray 对象缓冲区(加密复制)
        /// </summary>
        /// <param name="src">源缓冲区</param>
        /// <param name="srcOffset"> src 中从零开始的字节偏移量</param>
        /// <param name="offset">当前ByteArray对象缓冲区从零开始的字节偏移量</param>
        /// <param name="count">要复制的字节数,如果超出缓冲区则仅复制有效缓冲区数据</param>
        /// <param name="crytor">加/解密器对象</param>
        /// <returns>复制的字节数</returns>
        public virtual int CopyFromEncryt(byte[] src, int srcOffset, int offset, int count, ICrytPackage crytor)
        {
            var canCopyLen = Math.Min(src.Length - srcOffset, size - offset);

            count = Math.Min(count, canCopyLen);
            refreshDataLength(offset + count);
            if (count > 0)
            {
                for (int i = 0; i < count; i++)
                {
                    m_buffer[offset + i] = crytor.Encryt(src[srcOffset + i]);
                }
                return(count);
            }

            return(0);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 将 ByteArray 对象的缓冲区中 offset 参数指定位置开始的缓冲区数据复制到
        /// 起始于 dstOffset 参数指定位置的 dst 参数指定的缓冲区中(加密复制)
        /// </summary>
        /// <param name="dst">要复制到的目标缓冲区</param>
        /// <param name="dstOffset"> dst 中从零开始的字节偏移量</param>
        /// <param name="offset">当前ByteArray对象缓冲区从零开始的字节偏移量</param>
        /// <param name="crytor">加/解密器对象</param>
        /// <returns></returns>
        public virtual int CopyToEncryt(byte[] dst, int dstOffset, int offset, ICrytPackage crytor)
        {
            int len = Math.Min(dst.Length - dstOffset, dataLength - offset);

            if (len > 0)
            {
                for (int i = 0; i < len; i++)
                {
                    dst[dstOffset + i] = crytor.Encryt(m_buffer[offset + i]);
                }
            }
            else
            {
                len = 0;
            }

            refreshDataLength(offset + len);

            return len;
        }
Exemplo n.º 4
0
        /// <summary>
        /// 在 src 参数指定的缓冲区中,从 srcOffset 参数指定的位置开始将 count 参数指定的长度
        /// 复制到起始于 offset 参数指定位置的当前 ByteArray 对象缓冲区(加密复制)
        /// </summary>
        /// <param name="src">源缓冲区</param>
        /// <param name="srcOffset"> src 中从零开始的字节偏移量</param>
        /// <param name="offset">当前ByteArray对象缓冲区从零开始的字节偏移量</param>
        /// <param name="count">要复制的字节数,如果超出缓冲区则仅复制有效缓冲区数据</param>
        /// <param name="crytor">加/解密器对象</param>
        /// <returns>复制的字节数</returns>
        public virtual int CopyFromEncryt(byte[] src, int srcOffset, int offset, int count, ICrytPackage crytor)
        {
            var canCopyLen = Math.Min(src.Length - srcOffset, size - offset);
            count = Math.Min(count, canCopyLen);
            refreshDataLength(offset + count);
            if (count > 0)
            {
                for (int i = 0; i < count; i++)
                {
                    m_buffer[offset + i] = crytor.Encryt(src[srcOffset + i]);
                }
                return count;
            }

            return 0;
        }