读书人

哪位高手有C语言的加解密库!

发布时间: 2012-01-28 22:06:13 作者: rapoo

谁有C语言的加解密库!!
RT,能不能发份给我,谢谢!!!fangchao918628@163.com

[解决办法]
windows vista以后的版本就有相应的api加密函数

Windows Cryptography API: Next Generation
[解决办法]
我有一个,RC4加密算法,是用C#写的,改改就可以了(流加密算法)

C# code
using System;using System.Collections.Generic;using System.Text;/****************************************    * 包名称:Encrypt    * 作用:加解密类,采用RC4算法加解密流    * 作者:沈毅(yshen)    * 时间:2008/8/23    * *************************************/namespace net.yshen.NetKit.Common{    /// <summary>    /// 保存密钥序列化出来的值    /// </summary>    class rc4_key    {        /// <summary>        /// 序列化值        /// </summary>        public byte[] state = new byte[256];        /// <summary>        /// 当前的X        /// </summary>              public byte x;        /// <summary>        /// 当前的Y        /// </summary>        public byte y;    }    /// <summary>    /// 加密解密类    /// </summary>    public class Rc4Crypt    {        /// <summary>        /// 序列化值        /// </summary>        private rc4_key key = new rc4_key();        /// <summary>        /// 构造函数        /// </summary>        /// <param name="keyData">密钥</param>        /// <param name="keyLen">密钥字节长度</param>        public Rc4Crypt(byte[] keyData, int keyLen)        {            //根据传过来的密钥,构造序列化数值            prepare_key(keyData, keyLen);        }        /// <summary>        /// 交换X,Y值        /// </summary>        /// <param name="x">X</param>        /// <param name="y">Y</param>        private void swap_byte(ref byte x, ref byte y)        {            byte temp = x;            x = y;            y = temp;        }        /// <summary>        /// 根据密钥,产生序列化值        /// </summary>        /// <param name="key_data_ptr">密钥</param>        /// <param name="key_data_len">密钥字节长度</param>        private void prepare_key(byte[] key_data_ptr, int key_data_len)        {            byte index1;            byte index2;            short counter;            for (counter = 0; counter < 256; counter++)            {                key.state[counter] = (byte)counter;            }            key.x = 0;            key.y = 0;            index1 = 0;            index2 = 0;            for (counter = 0; counter < 256; counter++)            {                index2 =(byte)((key_data_ptr[index1] + key.state[counter] + index2) % 256);                swap_byte(ref key.state[counter], ref key.state[index2]);                index1 = (byte)((index1 + 1) % key_data_len);            }        }        /// <summary>        /// 加密或者解密        /// </summary>        /// <param name="buffer_ptr">数据内容</param>        /// <param name="buffer_ptr">数据开始下标</param>        /// <param name="buffer_len">数据长度</param>        /// <returns>true or false</returns>        public void rc4(ref byte[] buffer_ptr,int index, int buffer_len)        {            byte x;            byte y;            byte xorIndex;            uint counter;            x = key.x;            y = key.y;            for (counter = 0; counter < buffer_len; counter++)            {                x = (byte)((x + 1) % 256);                y = (byte)((key.state[x] + y) % 256);                swap_byte(ref key.state[x], ref key.state[y]);                xorIndex = (byte)((key.state[x] + key.state[y]) % 256);                buffer_ptr[counter+index] ^= key.state[xorIndex];            }            key.x = x;            key.y = y;        }    }} 

读书人网 >VC/MFC

热点推荐