有谁知道BAS464加密法啊,讲讲是怎么回事啊!有源程序吗? 如题。有谁知道BAS464加密法啊,讲讲是怎么回事啊!有源程序吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BASE64也算不上什么加密法,只是一种电子邮件传输中常用的一种对二进制信息进行编码的规则。它把每三个字节拆成4份,由于每一份只有6位,对应的值在0到63之间,它把他们分别对应到A~B,a~b,0~9,+,/这64个字母,最后一位如果不满,则用“==”表示仅含有8位,“=”表示仅含有16位。这样,任何一种信息都可以通过可见的ASCII字符进行“安全”传输。 它是一种把数据的每个字节都限制在一个范围内的方法,不是加密算法比如: 10100011 11111100 01001001将转成 00101000 00111111 00110001 00001001它会将三个字节数据转成四个字节,如上所示,转成后每个字节前两位都是0,所以数据每位都不会超过一个范围===================================================Digit Pro space 欢迎您http://www.dpspace.com有什么问题到论坛上发表,我将尽我全力为您解决论坛欢迎高手注册加入,让我们共同进步 unsigned int m_LineWidth = 76;const char BASE64_ENCODE_TABLE[64] = { 65, 66, 67, 68, 69, 70, 71, 72, // 00 - 07 73, 74, 75, 76, 77, 78, 79, 80, // 08 - 15 81, 82, 83, 84, 85, 86, 87, 88, // 16 - 23 89, 90, 97, 98, 99, 100, 101, 102, // 24 - 31 103, 104, 105, 106, 107, 108, 109, 110, // 32 - 39 111, 112, 113, 114, 115, 116, 117, 118, // 40 - 47 119, 120, 121, 122, 48, 49, 50, 51, // 48 - 55 52, 53, 54, 55, 56, 57, 43, 47 };// 56 - 63const unsigned int BASE64_DECODE_TABLE[256] = { 255, 255, 255, 255, 255, 255, 255, 255, // 00 - 07 255, 255, 255, 255, 255, 255, 255, 255, // 08 - 15 255, 255, 255, 255, 255, 255, 255, 255, // 16 - 23 255, 255, 255, 255, 255, 255, 255, 255, // 24 - 31 255, 255, 255, 255, 255, 255, 255, 255, // 32 - 39 255, 255, 255, 62, 255, 255, 255, 63, // 40 - 47 52, 53, 54, 55, 56, 57, 58, 59, // 48 - 55 60, 61, 255, 255, 255, 255, 255, 255, // 56 - 63 255, 0, 1, 2, 3, 4, 5, 6, // 64 - 71 7, 8, 9, 10, 11, 12, 13, 14, // 72 - 79 15, 16, 17, 18, 19, 20, 21, 22, // 80 - 87 23, 24, 25, 255, 255, 255, 255, 255, // 88 - 95 255, 26, 27, 28, 29, 30, 31, 32, // 96 - 103 33, 34, 35, 36, 37, 38, 39, 40, // 104 - 111 41, 42, 43, 44, 45, 46, 47, 48, // 112 - 119 49, 50, 51, 255, 255, 255, 255, 255, // 120 - 127 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 };void WriteLog(LPCTSTR sIn){ return; FILE *fp = fopen("c:\\deslog.txt","a"); fprintf(fp,"%s\n",sIn); fclose(fp);}int Base64DecodeSize(int iSize){ return ((iSize + 3) / 4 * 3)/2*2;}int base64_decode(char *pSrc, unsigned int nSize, char *pDest){ if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; unsigned int lByteBuffer, lByteBufferSpace; unsigned int C; //临时阅读变量 int reallen; char *InPtr, *InLimitPtr; char *OutPtr; lByteBuffer = 0; lByteBufferSpace = 4; InPtr = pSrc; InLimitPtr= InPtr + nSize; OutPtr = pDest; while (InPtr != InLimitPtr) { C = BASE64_DECODE_TABLE[*InPtr]; // Read from InputBuffer. InPtr++; if (C == 0xFF) continue; //读到255非法字符 lByteBuffer = lByteBuffer << 6 ; lByteBuffer = lByteBuffer | C ; lByteBufferSpace--; if (lByteBufferSpace != 0) continue; //一次读入4个字节 //到序写入3个字节到缓冲 OutPtr[2] = lByteBuffer; lByteBuffer = lByteBuffer >> 8; OutPtr[1] = lByteBuffer; lByteBuffer = lByteBuffer >> 8; OutPtr[0] = lByteBuffer; //准备写入后3位 OutPtr+= 3; lByteBuffer = 0; lByteBufferSpace = 4; } reallen = (unsigned int)OutPtr - (unsigned int)pDest; //处理尾部 返回实际长度 switch (lByteBufferSpace) { case 1: lByteBuffer = lByteBuffer >> 2; OutPtr[1] = lByteBuffer; lByteBuffer = lByteBuffer >> 8; OutPtr[0] = lByteBuffer; return reallen + 2; case 2: lByteBuffer = lByteBuffer >> 4; OutPtr[0] = lByteBuffer; return reallen + 1; default: return reallen; }}int Base64EncodeSize(int iSize){ int nSize, nCR; nSize = (iSize + 2) / 3 * 4 ; nCR = nSize / m_LineWidth; //计算回车数量 nSize+= nCR * 2; return nSize;}int base64_encode(char *pSrc, unsigned int nSize, char *pDest){ if ((pSrc == NULL) || (nSize <= 0)) return 0; unsigned int iB, iInMax3, Len; char *pInPtr, *pInLimitPtr; char *OutPtr ; pInPtr = pSrc; iInMax3 = nSize / 3 * 3; OutPtr = pDest; pInLimitPtr = pInPtr + iInMax3; while (pInPtr != pInLimitPtr) { Len = 0; while ((Len < m_LineWidth) && (pInPtr != pInLimitPtr)) { iB = (unsigned char) *pInPtr++; iB = iB << 8; iB = iB | (unsigned char) *pInPtr++; iB = iB << 8; iB = iB | (unsigned char) *pInPtr++; //以4 byte倒序写入输出缓冲 OutPtr[3] = BASE64_ENCODE_TABLE[iB & 0x3F]; iB = iB >> 6; OutPtr[2] = BASE64_ENCODE_TABLE[iB & 0x3F]; iB = iB >> 6; OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; iB = iB >> 6; OutPtr[0] = BASE64_ENCODE_TABLE[iB]; OutPtr+=4; Len+=4; } if (Len >= m_LineWidth) { *OutPtr++ = '\r'; //加上回车换行符 *OutPtr++ = '\n'; } } //设置尾部 switch (nSize - iInMax3) { case 1: iB = (unsigned char) *pInPtr; iB = iB << 4; OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; iB = iB >> 6; OutPtr[0] = BASE64_ENCODE_TABLE[iB]; OutPtr[2] = '='; //用'='也就是64码填充剩余部分 OutPtr[3] = '='; OutPtr+=4; break; case 2: iB = (unsigned char) *pInPtr++; iB = iB << 8; iB = iB | (unsigned char) *pInPtr; iB = iB << 2; OutPtr[2] = BASE64_ENCODE_TABLE[iB & 0x3F]; iB = iB >> 6; OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; iB = iB >> 6; OutPtr[0] = BASE64_ENCODE_TABLE[iB]; OutPtr[3] = '='; // Fill remaining byte. OutPtr+=4; break; } return (unsigned int) (OutPtr - pDest);}给分啦 源代码:http://cn.esoftbank.com/Sof_Cent/Src_Desc.asp?Catalog_ID=87&ID=1160 怎样解决输出信息在CEdit显示过多的问题? 大家来帮我看看这个奇怪的问题吧?我调了很长时间也没解决 怎样改变exe文件的资源 來者有分 VC++6.0的調試技巧和經驗談 有关big-endian和little-endian的问题,请各位讲解一下 SendInput() PostMessage()这两个函数怎么用,谁给详细说说 vc与图像处理 关于SQL Server 2000的问题 在MFC中如何使用这样一个多继承。从CMenu和CWnd派生, 关于使用ntddk.h的问题 注射线程怎样实现? 接收数据的时候buffer应该怎么开?
它把每三个字节拆成4份,由于每一份只有6位,对应的值在0到63之间,它把他们分别对应到A~B,a~b,0~9,+,/这64个字母,最后一位如果不满,则用“==”表示仅含有8位,“=”表示仅含有16位。
这样,任何一种信息都可以通过可见的ASCII字符进行“安全”传输。
比如:
10100011 11111100 01001001
将转成
00101000 00111111 00110001 00001001它会将三个字节数据转成四个字节,如上所示,转成后每个字节前两位都是0,所以数据每
位都不会超过一个范围
===================================================
Digit Pro space 欢迎您
http://www.dpspace.com
有什么问题到论坛上发表,我将尽我全力为您解决
论坛欢迎高手注册加入,让我们共同进步
const char BASE64_ENCODE_TABLE[64] = {
65, 66, 67, 68, 69, 70, 71, 72, // 00 - 07
73, 74, 75, 76, 77, 78, 79, 80, // 08 - 15
81, 82, 83, 84, 85, 86, 87, 88, // 16 - 23
89, 90, 97, 98, 99, 100, 101, 102, // 24 - 31
103, 104, 105, 106, 107, 108, 109, 110, // 32 - 39
111, 112, 113, 114, 115, 116, 117, 118, // 40 - 47
119, 120, 121, 122, 48, 49, 50, 51, // 48 - 55
52, 53, 54, 55, 56, 57, 43, 47 };// 56 - 63const unsigned int BASE64_DECODE_TABLE[256] = {
255, 255, 255, 255, 255, 255, 255, 255, // 00 - 07
255, 255, 255, 255, 255, 255, 255, 255, // 08 - 15
255, 255, 255, 255, 255, 255, 255, 255, // 16 - 23
255, 255, 255, 255, 255, 255, 255, 255, // 24 - 31
255, 255, 255, 255, 255, 255, 255, 255, // 32 - 39
255, 255, 255, 62, 255, 255, 255, 63, // 40 - 47
52, 53, 54, 55, 56, 57, 58, 59, // 48 - 55
60, 61, 255, 255, 255, 255, 255, 255, // 56 - 63
255, 0, 1, 2, 3, 4, 5, 6, // 64 - 71
7, 8, 9, 10, 11, 12, 13, 14, // 72 - 79
15, 16, 17, 18, 19, 20, 21, 22, // 80 - 87
23, 24, 25, 255, 255, 255, 255, 255, // 88 - 95
255, 26, 27, 28, 29, 30, 31, 32, // 96 - 103
33, 34, 35, 36, 37, 38, 39, 40, // 104 - 111
41, 42, 43, 44, 45, 46, 47, 48, // 112 - 119
49, 50, 51, 255, 255, 255, 255, 255, // 120 - 127
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255 };void WriteLog(LPCTSTR sIn)
{
return;
FILE *fp = fopen("c:\\deslog.txt","a");
fprintf(fp,"%s\n",sIn);
fclose(fp);
}int Base64DecodeSize(int iSize)
{
return ((iSize + 3) / 4 * 3)/2*2;
}int base64_decode(char *pSrc, unsigned int nSize, char *pDest)
{
if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0;
unsigned int lByteBuffer, lByteBufferSpace;
unsigned int C; //临时阅读变量
int reallen;
char *InPtr, *InLimitPtr;
char *OutPtr;
lByteBuffer = 0; lByteBufferSpace = 4;
InPtr = pSrc;
InLimitPtr= InPtr + nSize;
OutPtr = pDest;
while (InPtr != InLimitPtr)
{
C = BASE64_DECODE_TABLE[*InPtr]; // Read from InputBuffer.
InPtr++;
if (C == 0xFF) continue; //读到255非法字符
lByteBuffer = lByteBuffer << 6 ;
lByteBuffer = lByteBuffer | C ;
lByteBufferSpace--;
if (lByteBufferSpace != 0) continue; //一次读入4个字节
//到序写入3个字节到缓冲
OutPtr[2] = lByteBuffer;
lByteBuffer = lByteBuffer >> 8;
OutPtr[1] = lByteBuffer;
lByteBuffer = lByteBuffer >> 8;
OutPtr[0] = lByteBuffer;
//准备写入后3位
OutPtr+= 3; lByteBuffer = 0; lByteBufferSpace = 4;
}
reallen = (unsigned int)OutPtr - (unsigned int)pDest;
//处理尾部 返回实际长度
switch (lByteBufferSpace)
{
case 1:
lByteBuffer = lByteBuffer >> 2;
OutPtr[1] = lByteBuffer;
lByteBuffer = lByteBuffer >> 8;
OutPtr[0] = lByteBuffer;
return reallen + 2;
case 2:
lByteBuffer = lByteBuffer >> 4;
OutPtr[0] = lByteBuffer;
return reallen + 1;
default:
return reallen;
}
}int Base64EncodeSize(int iSize)
{
int nSize, nCR;
nSize = (iSize + 2) / 3 * 4 ;
nCR = nSize / m_LineWidth; //计算回车数量
nSize+= nCR * 2;
return nSize;
}int base64_encode(char *pSrc, unsigned int nSize, char *pDest)
{
if ((pSrc == NULL) || (nSize <= 0)) return 0;
unsigned int iB, iInMax3, Len;
char *pInPtr, *pInLimitPtr;
char *OutPtr ;
pInPtr = pSrc;
iInMax3 = nSize / 3 * 3;
OutPtr = pDest;
pInLimitPtr = pInPtr + iInMax3;
while (pInPtr != pInLimitPtr)
{
Len = 0;
while ((Len < m_LineWidth) && (pInPtr != pInLimitPtr))
{
iB = (unsigned char) *pInPtr++;
iB = iB << 8;
iB = iB | (unsigned char) *pInPtr++;
iB = iB << 8;
iB = iB | (unsigned char) *pInPtr++;
//以4 byte倒序写入输出缓冲
OutPtr[3] = BASE64_ENCODE_TABLE[iB & 0x3F];
iB = iB >> 6;
OutPtr[2] = BASE64_ENCODE_TABLE[iB & 0x3F];
iB = iB >> 6;
OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F];
iB = iB >> 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr+=4;
Len+=4;
}
if (Len >= m_LineWidth)
{
*OutPtr++ = '\r'; //加上回车换行符
*OutPtr++ = '\n';
}
}
//设置尾部
switch (nSize - iInMax3)
{
case 1:
iB = (unsigned char) *pInPtr;
iB = iB << 4;
OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F];
iB = iB >> 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr[2] = '='; //用'='也就是64码填充剩余部分
OutPtr[3] = '=';
OutPtr+=4;
break;
case 2:
iB = (unsigned char) *pInPtr++;
iB = iB << 8;
iB = iB | (unsigned char) *pInPtr;
iB = iB << 2;
OutPtr[2] = BASE64_ENCODE_TABLE[iB & 0x3F];
iB = iB >> 6;
OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F];
iB = iB >> 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr[3] = '='; // Fill remaining byte.
OutPtr+=4;
break;
}
return (unsigned int) (OutPtr - pDest);
}
给分啦