+ -
当前位置:首页 → 问答吧 → 加密数据 存数据库 部分丢失

加密数据 存数据库 部分丢失

时间:2011-11-29

来源:互联网

c++中CString类型数据加密后的数据放入 数据库后,重新取出时数据丢失了后面一部分。
因此就不能再用解密算法还原了。

我用的数据库是Access,加解密算法是AES算法。

  请了解的大神帮一下忙。

作者: yuanfj86912   发布时间: 2011-11-29

你看下数据库 里面存的数据是不是你加密后数据。
就是你要先搞清楚是你加密时候出的错,还是存进去的时候出的错,抑或是你读数据的时候出的错..

作者: AlfaCuton   发布时间: 2011-11-29

引用 1 楼 alfacuton 的回复:
你看下数据库 里面存的数据是不是你加密后数据。
就是你要先搞清楚是你加密时候出的错,还是存进去的时候出的错,抑或是你读数据的时候出的错..


我看过了,加密部分没有问题,存入前也没有问题,可是到取出来是后面就少了一段。

有没有大神遇到过啊。求解救!

作者: yuanfj86912   发布时间: 2011-11-29

加密后的数据可能不是字符串了,CString会被截断
用char或byte数组

作者: stjay   发布时间: 2011-11-29

引用 3 楼 stjay 的回复:
加密后的数据可能不是字符串了,CString会被截断
用char或byte数组


可是我加密前 char* 字符串的长度 和加密后赋给CString的长度是一样的啊!

作者: yuanfj86912   发布时间: 2011-11-29

////////AES加密
从之前程序得到 m_manageCode
加密前我把CString转化成BYTE型:
int strLength = m_manageCode.GetLength()+1;
BYTE* Btmp = new BYTE[100]; //
Btmp = (BYTE*)m_manageCode.GetBuffer(m_manageCode.GetLength());
*(Btmp+m_manageCode.GetLength()) = '\0'; 
  加密
theApp.aes.Cipher((void *)Btmp,strLength-1);
  加密后再把BYTE型转化成CString:
CString manageCode ;
manageCode.Format("%s",Btmp);
  存入数据库…………



//AES解密
从数据库中取出CString类型的数据 转化成BYTE
int strLength = Managecode.GetLength()+1;
BYTE * Ftmp = new BYTE[100];
Ftmp = (BYTE*)Managecode.GetBuffer(Managecode.GetLength());
  解密
theApp.aes.InvCipher((void *)Ftmp, strLength-1);
  解密后再把BYTE型转化成CString:
CString manageCode;
manageCode.Format("%s", Ftmp);


为什么解密后的数据和原文不相同。其中加解密函数是没有问题的。
希望大神帮帮忙啊!!




作者: yuanfj86912   发布时间: 2011-12-06

// 检查几个地方
// 1、数据库字段的长度是否足够?
// 2、密文中是否有'\0'存在,导致数据被截断?
// 这两项结合直接查看数据库中的内容和计算得到的密文比较
// 3、取出的操作是否正确?

作者: lfchen   发布时间: 2011-12-06