
数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用UserService对密码进行加密的时候,spring security 也是需要进行同步配置的,因为spring security 中验证的加密方式是单独配置的。如下:
<authentication-manager>
<authentication-provider user-service-ref="userDetailService">
<password-encoder ref="passwordEncoder" />
</authentication-provider>
</authentication-manager>
<beans:bean class="comsapphiresecurityMyPasswordEncoder" id="passwordEncoder">
<beans:constructor-arg value="md5"></beans:constructor-arg>
</beans:bean>
如上述配置文件所示,passwordEncoder才是在spring security对账号加密校验的地方。
spring security在拦截之后,会首先对用户进行查找,通过自己定义的userDetailService来找到对应的用户,然后由框架进行密码的匹配验证。
从userDetailService得到user以后,就会进入到DaoAuthenticationProvider中,这是框架中定义的 ,然后跳入其中的authenticate方法中。
该方法会进行两个检查,分别是
preAuthenticationChecks : 主要进行的是对用户是否过期等信息的校验,调用的方法在userDetail中有定义的。
additionalAuthenticationChecks : 这个就是用户名密码验证的过程了。
而PasswordEncoder是我们xml中注入的bean,所以了,我们调用的则是我们自己完成的passwordEncoder
public class MyPasswordEncoder extends MessageDigestPasswordEncoder {
public MyPasswordEncoder(String algorithm) {
super(algorithm);
}
@Override
public boolean isPasswordValid(String encPass, String rawPass, Object salt) {
return encPassequals(DigestUtilsmd5DigestAsHex(rawPassgetBytes()));
}
}
这是我对其实现的一个简单版本,调用的就是spring自带的加密算法,很简单了,当然也可以使用复杂的加密方法,这个就靠自己了
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
好像没这东西
你在编程语言中实现把
这种情况我都是用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("密码内容"));
}
}
给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使用起来,只要点击需要加密的文件的右键,即可轻松实现文件的加密。
解密只要双击已加密文件,输入密码即可轻松搞定。
点击access的开始菜单,打开开始菜单
在开始菜单中,选择打开
在打开对话框中,我们选中一个我们想要加密的数据库,然后点击下面这个下拉按钮,也就是黑色小三角,打开一个下拉菜单
在这个菜单中,点击以独占方式打开
在打开的数据库中,我们点击菜单栏上面的数据库工具
在这个选项中,我们点击用密码进行加密
输入密码两次,如果两次密码输入一样,点击确定即可。
如果你要取消密码,同样需要以独占方式打开数据库
还是在添加密码的地方,依次点击数据库工具——用密码进行加密
如果你没有用独占方式打开数据库,在这一步,系统会提示你,不能修改密码,这时候你要返回第八步,重新打开
如果你是以独占方式打开数据库,那么你在这一步会看到输入密码的对话框,如果你输入的密码正确,数据库就会被取消密码。点击确定即可。
一般是先加盐再用不可逆加密算法加密密码的,常见的有:sha1 sha256 md5等。
作用:这些加密算法,只能加密,不能逆向解密,所以使用这些算法。即时你的数据库被拖库,得到的人,也无法知道用户密码。
为什么加盐
举例
在注册时,
假设你的密码是1234,一般服务器会加一个盐(随便一个乱打的字符串),和你的密码加在一起,1234和efnU(@#H!JKNF得到1234efnU(@#H!JKNF这个值,然后再进行加密(这里我用md5)得到 91dc02c1fc2ce2252969e6b86173aa78,于是数据库里你的密码就变为了91dc02c1fc2ce2252969e6b86173aa78
登入时,
你输入1234, 然后服务器用和注册相同的步骤进行加密,得到加密后的值,91dc02c1fc2ce2252969e6b86173aa78,将这个值与数据库的加密值比对,如果正确则登入。
3des加密很常用
而且算法很多
自己可以随意改
自己设置个加密密钥就行
用户名没必要加密
因为你这不是银行的数据库
感觉差不多就行,如果想万全的话,还是要在数据库的严密性上来做文章。。
如何在SQL Server数据库中加密数据
在Sql Server 中经常要对存在表中数据加密,比如密码字段,我们可以利用Sql 中自带的加密函数pwdencrypt()来进行加密,加密之后无法解密码,需要使用pwdcompare('原文','密码')对比,如果返回结果为1,表示密码相符,如果为0,表示不符
数据库透明加密是指通过对数据库中的数据进行加密,实现对敏感数据的保护,同时不影响应用程序的正常访问。它可以让数据库管理员在不需要修改应用程序的情况下,使用基于角色的安全策略来实现对数据库的访问控制和数据加密。
具体来说,数据库透明加密将加密和解密 *** 作集成到了数据库引擎中,这使得应用程序不需要自己处理加解密 *** 作,从而减少了开发难度和代码复杂性。在实现上,数据库透明加密通常包括以下步骤:
配置加密策略:管理员可以定义基于角色的加密策略,例如哪些数据需要加密、加密算法和密钥等。
数据加密:当数据被插入到数据库中时,数据库引擎会对敏感数据进行自动加密。这样,即使黑客攻击成功获取了数据库文件,也无法读取其中存储的敏感信息。
数据解密:当数据被查询时,数据库引擎会自动解密数据,并将结果返回给应用程序。因此,应用程序可以像查询普通未加密的数据一样来 *** 作。
就国内而言,做数据库透明加密产品的公司越来越多,比如:安华金和、天融信、安恒、绿盟等等,相比之下觉得安华金和的产品是做的是最好的,支持的库的类型也是最多的。
以上就是关于如何对数据库进行加密和解密全部的内容,包括:如何对数据库进行加密和解密、数据库如何实现字段加密、怎样给SQLite数据库文件进行加密解密等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)