首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

加密字符串封存与读取

2013-10-22 
加密字符串保存与读取加密后的字符串Jn%+E..亷檿亷憠庘D[G$.厱欛5NW请教如何将这样的数据保存到sqlse

加密字符串保存与读取
加密后的字符串

Jn'%+E..亷檿亷憠庘D;[G$.厱欛5NW

请教如何将这样的数据保存到sqlserver数据库,并读取出来。谢谢高手。
[解决办法]
最好base64编码再存到数据库,当作字符串
[解决办法]
写的时候类似这样:

// 尝试连接数据库
try
{
    con->Connected = true;
}
catch (...)
{
    return;
}

// 假设要存储的数据是255个字节的byte数组
BYTE bt[255];
for (int i = 0; i < 255; i++)
    bt[i] = i + 1;

// 向数据库插入一条记录,用参数的形式传输二进制数据
qry->Close();
qry->SQL->Text = "insert into 表名(二进制字段) values(:vBinary)";

int b[2] = {0, 255};
Variant v = VarArrayCreate(b, 1, varByte);

for (int i = 0; i < 255; i++)
    v.PutElement(bt[i], i + 1);

qry->Parameters->ParamByName("vBinary")->Value = v;

qry->ExecSQL();

SafeArrayDestroyData(v.parray);

读出的时候类似这样:
try
{
    con->Connected = true;
}
catch (...)
{
    return;
}

qry->Close();
qry->SQL->Text = "select 二进制字段名 from 表名 where 条件";
qry->Open();

if (qry->RecordCount > 0)
{
    Variant v = qry->FieldByName("二进制字段名")->AsVariant;
    if (v.IsArray())
    {
        // 获取二进制数据的长度
        int nCount = v.ArrayHighBound() - v.ArrayLowBound();
        // 创建一个数组来接受这些数据
        LPBYTE lp = new BYTE[nCount];
        // 将二进制数据逐一读取到Byte数组中
        for (int i = v.ArrayLowBound(); i < v.ArrayHighBound(); i++)
        {
            lp[i] = v.GetElement(i);
        }

        // 使用Byte数组的代码略去
        // ...
        // ...

        // 最后记的清场
        delete []lp;
    }
}

qry->Close();

[解决办法]
用Base64编码后存储到数据库,取出来后解码一下即可。这是比较稳妥而简便的做法,密文较短可以用varchar类型存储,密文长的话用image之类的存储即可!

热点排行