数据库如何实现字段加密
发布网友
发布时间:2022-04-19 13:30
我来回答
共6个回答
热心网友
时间:2022-05-02 07:58
好像没这东西
你在编程语言中实现把
这种情况我都是用MD5加密
虽然你不想听理论。。。我也懒得写代码。。。
1、把用户的密码用MD5改变成32个字符
2、将这字符串写到数据库里
3、判断密码是否正确的时候,把用户输入的密码在用MD5改变成32个字符、判断这字符串和数据库中字符串是否相同
下面是JAVA的MD5用法
import java.security.MessageDigest;
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 < b.length; i++) {
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
//将字节转换为十六进制字符
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 = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString
.getBytes("GBK")));
} catch (Exception ex) {
}
return resultString;
}
public static void main(String[] args)
{
System.out.println(MD5.MD5Encode("admin"));
System.out.println(MD5.MD5Encode("密码内容"));
}
}
热心网友
时间:2022-05-02 09:16
数据库没有这种功能,只能通过代码存储的时候进行md5加密
热心网友
时间:2022-05-02 10:51
插入加密数据:
1、INSERT INTO userdata(username,pasword,encryptedpassword)
2、VALUES ('smith','htims',AES_ENCRYPT('htims','key'))
上面的插入语句有三个字段,“用户名”、“密码”和“加密的密码”。
AES_ENCRYPT()函数需要一个“key”来协助加密,同样,解密也需要它。
从表中查询加密数据
1、SELECT username,pasword,AES_DECRYPT(encryptedpassword,'key')
2、FROM userdata.
热心网友
时间:2022-05-02 12:42
比如注册,用户注册时候,对密码进行md5,保存到数据库,在用户登录时,输入的密码进行md5和数据库中存储的值进行比较即可。
热心网友
时间:2022-05-02 14:50
oracle 数据库有 DBMS_CRYPTO
http://blog.csdn.net/rznice/article/details/7402850
热心网友
时间:2022-05-02 17:15
create view v_rand as select c=unicode(cast(round(rand()*255,0) as
tinyint)) go create function f_jmstr(@str varchar(8000),@type
bit)returns varchar(8000) /* *参数说明 *str:要加密的字符串或已经加密后的字符 *type:操作类型--0加密--解密 *返回
create view v_rand
as
select c=unicode(cast(round(rand()*255,0) as tinyint))
go
create function f_jmstr(@str varchar(8000),@type bit)returns varchar(8000)
/*
*参数说明
*str:要加密的字符串或已经加密后的字符
*type:操作类型--0加密--解密
*返回值说明
*当操作类型为加密时(type--0):返回为加密后的str,即存放于数据库中的字符串
*当操作类型为解密时(type--1):返回为实际字符串,即加密字符串解密后的原来字符串
*/
As
begin
declare @re varchar(8000)--返回值
declare @c int--加密字符
declare @i int
/*
*加密方法为原字符异或一个随机ASCII字符
*/
if @type=0--加密
begin
select @c=c,@re=@#@#,@i=len(@str) from v_rand
while @i>0
select @re=nchar(unicode(substring(@str,@i,1))^@c^@i)+@re
,@i=@i-1
set @re=@re+nchar(@c)
end
else--解密
begin
select @i=len(@str)-1,@c=unicode(substring(@str,@i+1,1)),@re=@#@#
while @i>0
select @re=nchar(unicode(substring(@str,@i,1))^@c^@i)+@re ,@i=@i-1
end
return(@re)
end
go
--测试
declare @tempstr varchar(20)
set @tempstr=@# 1 2 3aA@#
select dbo.f_jmstr(dbo.f_jmstr(@tempstr,0),1)
输出结果
1 2 3aA