
给SQLite数据库加密解密的方法:
1、创建空的sqlite数据库。
//数据库名的后缀你可以直接指定,甚至没有后缀都可以
//方法一:创建一个空sqlite数据库,用IO的方式
FileStream fs = FileCreate(“c:\\testdb“);
//方法二:用SQLiteConnection
SQLiteConnectionCreateFile(“c:\\testdb“);
创建的数据库是个0字节的文件。
2、创建加密的空sqlite数据库
//创建一个密码为password的空的sqlite数据库
SQLiteConnectionCreateFile(“c:\\test2db“);
SQLiteConnection cnn = new SQLiteConnection(“Data Source=c:\\test2db“);
SQLiteConnection cnn = new SQLiteConnection(“Data Source=D:\\test2db“);
cnnOpen();
cnnChangePassword(“password“);
3、给未加密的数据库加密
SQLiteConnection cnn = new SQLiteConnection(“Data Source=c:\\testdb“);
cnnOpen();
cnnChangePassword(“password“);
4、打开加密sqlite数据库
//方法一
SQLiteConnection cnn = new SQLiteConnection(“Data Source=c:\\test2db“);
cnnSetPassword(“password“);
cnnOpen();
//方法二
SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder();
builderDataSource = @”c:\testdb“;
builderPassword = @”password“;
SQLiteConnection cnn = new SQLiteConnection(builderConnectionString);
cnn Open();
除了用上述方法给SQLite数据库加密以外,您还可以使用专业的文件加密软件将SQLite数据库加密。
超级加密 3000采用先进的加密算法,使你的文件和文件夹加密后,真正的达到超高的加密强度,让你的加密数据无懈可击。
超级加密3000使用起来,只要点击需要加密的文件的右键,即可轻松实现文件的加密。
解密只要双击已加密文件,输入密码即可轻松搞定。
题主你可以使用 md5 或者 sha1 进行初步处理,但为了更加安全,请你同时加上两个 salt,一个静态 salt,一个动态的 salt。以 md5 为例:\x0d\假设通过 POST 传来的密码为 $_POST['password'],在存入 DB 前先进行如下的 *** 作:\x0d\$password = hash('md5', $_POST['password']$staticSalt$dynamicSalt);\x0d\\x0d\为了保证动态 salt 的唯一性,可以这样 *** 作:\x0d\$dynamicSalt = hash('md5', microtime());\x0d\\x0d\对于动态的 salt 可以与生成的密码一起保存在 DB 中,而静态 salt 则可以直接放在类文件中(例如定义为一个静态属性即可)。\x0d\首先谢谢题主采纳了我的答案,但是我之前的回答并不是最佳答案,之所以有此加密的想法源于自己所读的源码可能比较老,所以并没使用上较新版本的加密方法,例如 bcrypt等。\x0d\此外,第二点,感谢评论中几位前辈的提点,已经明白设置静态 salt 的意义并不大,生成一个较长的动态 salt 已然可以解决问题。\x0d\\x0d\LZ应该采用加盐HASH。\x0d\如何“腌制”密码呢?\x0d\=_,=\x0d\正确的格式应该是,用户password+动态的salt\x0d\动态的salt不能像2L所说的,使用microtime,因为时间在某些情况下不够随机,而且是可能被猜解的。\x0d\这里推荐一个我用的加盐HASH\x0d\$salt=base64_encode(mcrypt_create_iv(32,MCRYPT_DEV_RANDOM));\x0d\$password=sha1($register_password$salt);\x0d\\x0d\解释:\x0d\首先使用mcrypt,产生电脑随机生成的,专门用户加密的随机数函数。\x0d\第二步,把得到的随机数通过base64加密,使其变长并且不利于猜解。\x0d\第三步,把得出的盐拼接到密码的后面,再对其使用sha1进行哈希\x0d\再把password存入到用户的数据库。\x0d\PS:为何不用静态的salt?没有必要,使用一个动态随机足够长的盐足矣。\x0d\为何不用MD5?因为长度不够。\x0d\为何没有使用多次HASH?因为这样反而容易发生碰撞。\x0d\HASH好之后怎么使用“腌制”好的密码?\x0d\用户注册->提交密码->产生salt->腌制好的密码存入数据库->salt存入数据库。\x0d\用户登录->提交密码->调用salt接到提交密码的后面->进行HASH->调用之前注册腌制好的密码->对比HASH值是否和这个密码相同
3des加密很常用
而且算法很多
自己可以随意改
自己设置个加密密钥就行
用户名没必要加密
因为你这不是银行的数据库
感觉差不多就行,如果想万全的话,还是要在数据库的严密性上来做文章。。
好像没这东西
你在编程语言中实现把
这种情况我都是用MD5加密
虽然你不想听理论。。。我也懒得写代码。。。
1、把用户的密码用MD5改变成32个字符
2、将这字符串写到数据库里
3、判断密码是否正确的时候,把用户输入的密码在用MD5改变成32个字符、判断这字符串和数据库中字符串是否相同
下面是JAVA的MD5用法
import javasecurityMessageDigest;
public class MD5 {
private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
//将字节数组转换为十六进制字符串
private static String byteArrayToHexString(byte[] b) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < blength; i++) {
resultSbappend(byteToHexString(b[i]));
}
return resultSbtoString();
}
//将字节转换为十六进制字符
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = new String(origin);
//MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法
MessageDigest md = MessageDigestgetInstance("MD5");
resultString = byteArrayToHexString(mddigest(resultString
getBytes("GBK")));
} catch (Exception ex) {
}
return resultString;
}
public static void main(String[] args)
{
Systemoutprintln(MD5MD5Encode("admin"));
Systemoutprintln(MD5MD5Encode("密码内容"));
}
}
一般是先加盐再用不可逆加密算法加密密码的,常见的有:sha1 sha256 md5等。
作用:这些加密算法,只能加密,不能逆向解密,所以使用这些算法。即时你的数据库被拖库,得到的人,也无法知道用户密码。
为什么加盐
举例
在注册时,
假设你的密码是1234,一般服务器会加一个盐(随便一个乱打的字符串),和你的密码加在一起,1234和efnU(@#H!JKNF得到1234efnU(@#H!JKNF这个值,然后再进行加密(这里我用md5)得到 91dc02c1fc2ce2252969e6b86173aa78,于是数据库里你的密码就变为了91dc02c1fc2ce2252969e6b86173aa78
登入时,
你输入1234, 然后服务器用和注册相同的步骤进行加密,得到加密后的值,91dc02c1fc2ce2252969e6b86173aa78,将这个值与数据库的加密值比对,如果正确则登入。
数据库密码加密的不能看原密码。
数据库的密码都是经过再处理的,看不到原来的码,如果没经过处理,以明码的形式保存,那是看的到的。
数据库系统是由数据库及其管理软件组成的系统。它是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。
问题解决思路:将配置文件用户相关的信息(例如:密码)进行加密使其以密文形式存在,进行初始化连接池的时候进行解密 *** 作,达到成功创建连接池的目的。Tomcat默认使用DBCP连接池(基于common-pool的一种连接池实现),可在下载commons-dbcp源码包commons-dbcp-14-srczip,对orgapachecommonsdbcpBasicDataSourceFactory类修改,把数据库密码字段(加密后的密文)用解密程序解密,获得解密后的明文即可。具体实现:1修改orgapachecommonsdbcpBasicDataSourceFactory类文件找到数据源密码设置部分value=propertiesgetProperty(PROP_PASSWORD);if(value!=null){dataSourcesetPassword(value);}修改为:value=propertiesgetProperty(PROP_PASSWORD);if(value!=null){dataSourcesetPassword(Encodedecode(value));}将配置文件中的“密码”(加密后的结果)取出,调用加解密类中的解密方法Encodedecode(value)进行解密。2加密类Encodejava,本例中使用加密解密模块比较简单只是用来说明问题,密文为明文的十六进制串。publicclassEncode{//编码-普通字符串转为十六进制字符串publicstaticStringencode(Stringpassword){Stringresult=“”;byte[]psd=passwordgetBytes();for(inti=0;ipassword696e65743231urljdbc:oracle:thin:@127001:1521:orcldriverClassNameoraclejdbcdriverOracleDriverusernamewanfang4将修改后的BasicDataSourceFactoryjava和新添加的Encodejava编译后的class类文件重新打包进commons-dbcp-14jar,将该包拷贝进tomcat下的common/lib目录中,重启tomcat。此时tomcat下部署的应用在连接数据源的时候都可以在不暴露密码明文的情况下进行连接。转载,仅供参考。
以上就是关于怎样给SQLite数据库文件进行加密解密全部的内容,包括:怎样给SQLite数据库文件进行加密解密、用php将密码存入数据库,用什么方法进行加密、数据库中用户密码通常用什么加密方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)