社区
C++ Builder
帖子详情
文件加密问题!
Yea
2003-12-01 03:19:26
我现在用filewrite和fileread保存和写的文件都是明文。我想给文件加密,有没有加密控件或代码?如果自己编写该怎么样下手?
...全文
83
4
打赏
收藏
文件加密问题!
我现在用filewrite和fileread保存和写的文件都是明文。我想给文件加密,有没有加密控件或代码?如果自己编写该怎么样下手?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Yea
2003-12-03
打赏
举报
回复
没人回答我了吗?
Yea
2003-12-02
打赏
举报
回复
to:zxcdewq(工作·快乐<李木>)
请问加密函数和解密函数就可以把明文加密和解密,为什么需要加密钥匙??钥匙有什么用呢?
比如我的加密函数把a变为6.我用解密函数解密的时候遇到6就解成a不就完了吗?为什么要钥匙呢?
fancy05
2003-12-01
打赏
举报
回复
www.51delphi.com 有加密的控件下载,叫TurboPower ...
zxcdewq
2003-12-01
打赏
举报
回复
简单的字符串加密类
//---------------------------------------------------------------------------
#ifndef EncryptH
#define EncryptH
#include <Classes.hpp>
class Encrypt
{
public:// User declarations
AnsiString __fastcall EncryptCode(AnsiString sstr) ; //加密字符串
AnsiString __fastcall UnEncryptCode(AnsiString dstr); //解密字符串
private:
int __fastcall EncryptKey( int EnKey, bool UnKey ) ; //转换要保存加密钥匙
int __fastcall GetKey(); //得到随机加密钥匙
};
//---------------------------------------------------------------------------
#endif
#pragma hdrstop
#include "Encrypt.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
AnsiString __fastcall Encrypt::EncryptCode(AnsiString Encrypt)
{
int Key; //加密钥匙,每次生成不同的钥匙,记录到字符串中解密时使用
int Len; //要加密的字符串长度
AnsiString SStr;
Len = Encrypt.Length();
char *TempCr = new char[Len + 3]; //前两位写入符串长度和加密钥匙
int *TempInt = new int[Len + 3];
memset(TempCr,'\0',(Len + 3));
memset(TempInt,'\0',(Len + 3));
strcpy(TempCr+2, Encrypt.c_str()); //从第三位开始复制字符串到字符数组
Key = GetKey(); //得到随机的加密钥匙
TempInt[0] = Len; //写入字符串头两位,长度和加密钥匙
TempInt[1] = EncryptKey(Key, true) ;
SStr = "0x" + IntToHex(TempInt[0], 1) ; //在每个加密后字符前加0x表示16进制数
SStr += "0x" + IntToHex(TempInt[1], 1) ;
//循环写入字符串每个字符
for (int i=2; i<Len+2; i++)
{
TempCr[i] = TempCr[i]^Key ;
TempCr[i] += Key + 4 ;
TempInt[i] = TempCr[i]; //存储为数字可以避免遇到'\0'断开字符串的情况
TempInt[i] += Key -3;
AnsiString s = IntToHex(TempInt[i], 1); //把整形转为16进制存储
SStr += "0x" + s ;
}
delete[] TempCr;
delete[] TempInt;
return SStr + "0x";
}
//---------------------------------------------------------------------------
AnsiString __fastcall Encrypt::UnEncryptCode(AnsiString UnEncrypt)
{
int Key; //要提取的加密钥匙
int Len; //要提取的加密前的字符串长度
AnsiString DStr;
UnEncrypt.Delete(1, 2); //删除第一个0x
int P1 = UnEncrypt.Pos("0x"); //定位到下一个0x,
Len = StrToInt("0x" + UnEncrypt.SubString(1, P1-1)); //得到加密前文件长度
UnEncrypt = UnEncrypt.SubString(P1, UnEncrypt.Length()); //去掉已经解密出来的字符
UnEncrypt.Delete(1, 2);
P1 = UnEncrypt.Pos("0x");
Key = StrToInt("0x" + UnEncrypt.SubString(1, P1-1));
Key = EncryptKey(Key, false); //得到转换后的加密钥匙
UnEncrypt = UnEncrypt.SubString(P1, UnEncrypt.Length());
char *TempCr = new char[Len + 1];
char *TempInt = new char[Len + 1];
memset(TempCr, 0, (Len + 1));
memset(TempInt, 0, (Len + 1));
//循环解密每个字符,恢复字符串
for(int i=0; i<Len; i++)
{
int TL = UnEncrypt.Length();
if(TL <=0 )
{
if(Len != i)
{
//如果解密后长度和加密前不一样,则加密后文件被修改过。
// MessageBox(NULL, "加密后文件被修改过!请检查。", "出错了!", NULL);
}
break;
}
UnEncrypt.Delete(1, 2);
DStr = UnEncrypt.SubString(1, UnEncrypt.Pos("0x")-1) ;
UnEncrypt = UnEncrypt.SubString(UnEncrypt.Pos("0x"), TL - UnEncrypt.Pos("0x"));
/* int UL = DStr.Length();
//因为加密后字符长度不超过8位,如果大于8则被修改过
if( UL>8 )
{
if(MessageBox(NULL, "加密后文件被修改过!点击'是' 跳过错误继续解密,点击'否'停止解密。",
"出错了!", MB_YESNO) ==IDYES)
{
DStr = "00";
}
else
{
break;
}
} */
TempInt[i] = StrToInt("0x" + DStr) ;
TempInt[i] -= Key - 3;
TempCr[i] = TempInt[i];
TempCr[i] -= Key + 4;
TempCr[i] ^= Key;
}
AnsiString OkStr = String(TempCr); //字符数组转换为字符串
delete [] TempInt;
delete [] TempCr ;
return OkStr;
}
//---------------------------------------------------------------------------
int __fastcall Encrypt::GetKey()
{
int EnKey ;
Randomize(); //随机种子
EnKey = random(200) + 1; //得到随机加密钥匙
return EnKey;
}
//---------------------------------------------------------------------------
int __fastcall Encrypt::EncryptKey( int EnKey, bool UnKey )
{
if(UnKey)
{
EnKey += 4 ;
EnKey *= 4 ;
}
else
{
EnKey /= 4 ;
EnKey -= 4 ;
}
return EnKey; //返回加密后钥匙,不明文存储加密钥匙,提高加密保险度
}
//---------------------------------------------------------------------------
sqlcipher-3.0.1-windows含使用教程,可以直接
加密
db
文件
,直接解密db
文件
,直接查看数据库表数据
sqlcipher-3.0.1-windows含使用教程,可以直接
加密
db
文件
,直接解密db
文件
,直接查看数据库表数据。windows可用!含使用教程!自己用过整理的,很好用,所以2分不亏!
des
加密
算法(js+java)
加密
与解密结果相同
des
加密
算法(js+java)
加密
与解密结果...包含三个
文件
: des.js des.html ,用于实现前端脚本的
加密
与解密 des.java 用于后台的
加密
解密操作; 项目中正好用到,已经过验证,两个
加密
解密结果相同,分享给大家!
Express实战构建后台接口(jwt/
加密
/token)
本系列课程会带大家使用Express构建后端接口文档!包括jwt/token/
加密
等核心知识点!
一秒学会给自己的PDF文档
加密
!
在日常工作学习中,PDF是我们最常使用的一...这时候,给PDF文档
加密
就十分重要。要如何给一份或者多份PDF文档
加密
呢?下面,将以PDF Reader Pro Mac这款PDF工具为例来介绍一种简单的
加密
方法,从而保护你的信息!......
Excel
加密
文档
加密
保护破解方法 亲测有效
Excel
加密
文档
加密
保护破解方法 各种
加密
亲测有效,无需下载工具,按以下步骤30s解决! 操作步骤: 1. 打开需要破解密码的Excel
文件
; 2. 按 Alt+F11,进入VBA编辑界面; 3. 选择 插入 -- 模块(Module); 4. 在...
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章