数据库加密算法
用数据库做的md5映射,所以只要他的数据库里有就轻松的破解了,其实你这个问题我在以前就解决了 你可以在md5的结果里再自己做一下简单的变换,比如做一次反转之类的变化 实现起来也很简单,这样当人家不知道你在md5上加了反转 就直接去破解是破不出来的 我写了一段程序,希望对你有点帮助 import java.security.*; import java.io.*; import java.util.*; import sun.misc.BASE64Encoder; public class MD5 { public static String creatPassword(String password)throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(password.getBytes("UTF8")); byte[] digest = md.digest(); /*在这里随便做点什么变换就可以了,可以自由发挥了,你也可以写一个反转什么的,我这里就简单点写了,注意为了保证md5的碰撞困难,最好不要改变原有的字符集,就是说最好只交换某些字符的位置,不要改变原有的值 还有你在验证的时候也要按照你发挥的方法写*/ byte tt=digest[0];digest[0]=digest[7];digest[7]=tt; String outp; outp = new BASE64Encoder().encode(digest); /*顺便说一下采用BASE64Encoder编码后原本是16位的字符变成了24位,其中前22位是有效位,不是我们常见的16位了 这里也和我们用的数据库破解也不同,变换的过程其实是吧8位的byte只取6位,然后通过加字符长度来实现*/ return outp; } public static void main(String args[])throws Exception{ String md=new MD5().creatPassword("message for test"); System.out.println(md); } } 再给你一段代码,这段代码中用到的是一种比较安全的方式,理论是使破解不出来的,因为它使用了随机盐对密码加密,对同样一段密文加密的两次结果是不一样的,但是又同样能做登录认证,这样就没办法做数据库去匹配了,有兴趣的话可以研究一下,还有,加密结果是40位 import java.security.*; import java.io.*; import java.util.*; import sun.misc.*; public class MD { //加密 public static String creatPassword(String password)throws Exception { SecureRandom random = new SecureRandom(); byte[] salt = new byte[12]; random.nextBytes(salt); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(salt); md.update(password.getBytes("UTF8")); byte[] digest = md.digest(); String outp=new BASE64Encoder().encode(salt); outp = outp + new BASE64Encoder().encode(digest); return outp; } //认证,gavingPassword是客户输入的密码明文,password是存放的密码的密文 public static boolean authenticatePassword(String gavingPassword,String password ) throws Exception { String saltString = password.substring(0,16); byte[] salt = new BASE64Decoder().decodeBuffer(saltString); String digest1=password.substring(16); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(salt); md.update(gavingPassword.getBytes("UTF8")); byte[] digest = md.digest(); String digest2 = new BASE64Encoder().encode(digest); if(digest1.equals(digest2)) return true; else return false; } }
B. 问题,数据库密码是什么加密算法
数据库密码?问题描述不是很清楚啊。。。
你的意思如果是问用户名、密码在数据库中怎么存储,那么这个密码应该用MD5,SHA-1、SM3等HASH算法进行摘要,一般是这样。
这样能够避免DBA,或系统管理员等管理者的恶意行为。。。
C. 数据库里加密的密码是怎么实现的
C#中有数据加密的类using System.Security.Cryptography,在这个类中你可以调用它的两个方法分别是加密方法
public static string Encrypt(string text)
{}
解密方法
public static string Decrypt(string text)
{}
我们一般使用连接数据库加密的话,都会使用一个配置文件在配置文件中对数据库链接进行读写,通过加密方法把链接写到配置文件,然后读取的时候再使用解密方法。
希望可以帮到你,谢谢!
D. 数据库加密有几种
mysql数据库的认证密码有两种方式,
mysql
4.1版本之前是mysql323加密,mysql
4.1和之后的版本都是mysqlsha1加密,
mysql数据库中自带old_password(str)和password(str)函数,它们均可以在mysql数据库里进行查询,前者是mysql323加密,后者是mysqlsha1方式加密。
(1)以mysql323方式加密
select old_password('111111');
(2)以mysqlsha1方式加密
select
password('111111');
mysql323加密中生成的是16位字符串,而在mysqlsha1中生存的是41位字符串,其中*是不加入实际的密码运算中,通过观察在很多用户中都携带了"*",在实际破解过程中去掉"*",也就是说mysqlsha1加密的密码的实际位数是40位。
E. 数据库字段加密算法
字符对照表,加密
按下列方式找加密规律
明文 密文
1 8
11 8f
111 8fk
2
3
4
12
13
14
.....
F. 如何在mysql数据库中加入加密算法,使得数据库能够对数据库中的数据进行加密。
没有用过mysql加密,但一般都是用服务端语言把数据加密后存入数据库中,比如,在PHP里用md5函数把用户的密码加密之后存入数据中,一般都 是这么解决的。
G. 数据加密技术及其相关算法
数据加密技术 所谓数据加密(Data Encryption)技术是指将一个信息(或称明文,plain text)经过加密钥匙(Encryption key)及加密函数转换,变成无意义的密文(cipher text),而接收方则将此密文经过解密函数、解密钥匙(Decryption key)还原成明文。加密技术是网络安全技术的基石。
数据加密技术要求只有在指定的用户或网络下,才能解除密码而获得原来的数据,这就需要给数据发送方和接受方以一些特殊的信息用于加解密,这就是所谓的密钥。其密钥的值是从大量的随机数中选取的。按加密算法分为专用密钥和公开密钥两种。
专用密钥,又称为对称密钥或单密钥,加密和解密时使用同一个密钥,即同一个算法。如DES和MIT的Kerberos算法。单密钥是最简单方式,通信双方必须交换彼此密钥,当需给对方发信息时,用自己的加密密钥进行加密,而在接收方收到数据后,用对方所给的密钥进行解密。当一个文本要加密传送时,该文本用密钥加密构成密文,密文在信道上传送,收到密文后用同一个密钥将密文解出来,形成普通文体供阅读。在对称密钥中,密钥的管理极为重要,一旦密钥丢失,密文将无密可保。这种方式在与多方通信时因为需要保存很多密钥而变得很复杂,而且密钥本身的安全就是一个问题。
对称密钥是最古老的,一般说“密电码”采用的就是对称密钥。由于对称密钥运算量小、速度快、安全强度高,因而目前仍广泛被采用。
DES是一种数据分组的加密算法,它将数据分成长度为64位的数据块,其中8位用作奇偶校验,剩余的56位作为密码的长度。第一步将原文进行置换,得到64位的杂乱无章的数据组;第二步将其分成均等两段;第三步用加密函数进行变换,并在给定的密钥参数条件下,进行多次迭代而得到加密密文。
公开密钥,又称非对称密钥,加密和解密时使用不同的密钥,即不同的算法,虽然两者之间存在一定的关系,但不可能轻易地从一个推导出另一个。有一把公用的加密密钥,有多把解密密钥,如RSA算法。
非对称密钥由于两个密钥(加密密钥和解密密钥)各不相同,因而可以将一个密钥公开,而将另一个密钥保密,同样可以起到加密的作用。
在这种编码过程中,一个密码用来加密消息,而另一个密码用来解密消息。在两个密钥中有一种关系,通常是数学关系。公钥和私钥都是一组十分长的、数字上相关的素数(是另一个大数字的因数)。有一个密钥不足以翻译出消息,因为用一个密钥加密的消息只能用另一个密钥才能解密。每个用户可以得到唯一的一对密钥,一个是公开的,另一个是保密的。公共密钥保存在公共区域,可在用户中传递,甚至可印在报纸上面。而私钥必须存放在安全保密的地方。任何人都可以有你的公钥,但是只有你一个人能有你的私钥。它的工作过程是:“你要我听你的吗?除非你用我的公钥加密该消息,我就可以听你的,因为我知道没有别人在偷听。只有我的私钥(其他人没有)才能解密该消息,所以我知道没有人能读到这个消息。我不必担心大家都有我的公钥,因为它不能用来解密该消息。”
公开密钥的加密机制虽提供了良好的保密性,但难以鉴别发送者,即任何得到公开密钥的人都可以生成和发送报文。数字签名机制提供了一种鉴别方法,以解决伪造、抵赖、冒充和篡改等问题。
数字签名一般采用非对称加密技术(如RSA),通过对整个明文进行某种变换,得到一个值,作为核实签名。接收者使用发送者的公开密钥对签名进行解密运算,如其结果为明文,则签名有效,证明对方的身份是真实的。当然,签名也可以采用多种方式,例如,将签名附在明文之后。数字签名普遍用于银行、电子贸易等。
数字签名不同于手写签字:数字签名随文本的变化而变化,手写签字反映某个人个性特征,是不变的;数字签名与文本信息是不可分割的,而手写签字是附加在文本之后的,与文本信息是分离的。
值得注意的是,能否切实有效地发挥加密机制的作用,关键的问题在于密钥的管理,包括密钥的生存、分发、安装、保管、使用以及作废全过程。
H. 数据库怎么加密
安华金和数据库加密的技术方案主要有三种种:包括前置代理、应用加密和后置代理。前置代理的技术思路就是在数据库之前增加一道安全代理服务,对数据库访问的用户都必须经过该安全代理服务,在此服务中实现如数据加解密、存取控制等安全策略;然后安全代理服务通过数据库的访问接口实现数据在O中的最终存储。
安华金和数据库加密 应用层加密方案的主要技术原理是:
(1) 应用系统通过加密API(JDBC,ODBC,C API等)对敏感数据进行加密,将加密数据存储到Oracle数据库中;
(2)
在进行数据检索时,将密文数据取回到客户端,再进行解密;
(3) 应用系统将自行管理密钥。
后置代理的基本技术路线是使用“视图”+“触发器”+“扩展索引”+“外部调用”的方式实现数据加密,同时保证应用完全透明。
该方案的核心思想是充分利用数据库自身应用定制扩展能力,分别使用其触发器扩展能力、索引扩展能力、自定义函数扩展能力以及视图等技术来满足数据存储加密,加密后数据检索,对应用无缝透明等最主要需求。后置代理方案的核心目标包括:A、实现在数据库中敏感数据的按列加密;B、对应用提供透明的加密数据访问;C、为加密数据提供高效的索引访问;D、实现独立于数据库的权限控制;E、调用国产的加密算法。
目前在国内安华金和的数据库加密产品是最成熟的,已经广泛应用于运营商、中央部委等大型系统上。
I. 谁能简单介绍下数据库加密
一、数据库加密是什么?
数据库加密技术属于主动防御机制,可以防止明文存储引起的数据泄密、突破边界防护的外部黑客攻击以及来自于内部高权限用户的数据窃取,从根本上解决数据库敏感数据泄漏问题。数据库加密技术是数据库安全措施中最顶级的防护手段,也是对技术性要求最高的,产品的稳定性至关重要。
二、数据库加密的方式有哪些?
目前,不同场景下仍在使用的数据库加密技术主要有:前置代理加密、应用系统加密、文件系统加密、后置代理加密、表空间加密和磁盘加密等,下文将对前四种数据加密技术原理进行简要说明。
1、前置代理加密技术
该技术的思路是在数据库之前增加一道安全代理服务,所有访问数据库的行为都必须经过该安全代理服务,在此服务中实现如数据加解密、存取控制等安全策略,安全代理服务通过数据库的访问接口实现数据存储。安全代理服务存在于客户端应用与数据库存储引擎之间,负责完成数据的加解密工作,加密数据存储在安全代理服务中。
2、应用加密技术
该技术是应用系统通过加密API(JDBC,ODBC,CAPI等)对敏感数据进行加密,将加密数据存储到数据库的底层文件中;在进行数据检索时,将密文数据取回到客户端,再进行解密,应用系统自行管理密钥体系。
3、文件系统加解密技术
该技术不与数据库自身原理融合,只是对数据存储的载体从操作系统或文件系统层面进行加解密。这种技术通过在操作系统中植入具有一定入侵性的“钩子”进程,在数据存储文件被打开的时候进行解密动作,在数据落地的时候执行加密动作,具备基础加解密能力的同时,能够根据操作系统用户或者访问文件的进程ID进行基本的访问权限控制。
4、后置代理技术
该技术是使用“视图”+“触发器”+“扩展索引”+“外部调用”的方式实现数据加密,同时保证应用完全透明。核心思想是充分利用数据库自身提供的应用定制扩展能力,分别使用其触发器扩展能力、索引扩展能力、自定义函数扩展能力以及视图等技术来满足数据存储加密,加密后数据检索,对应用无缝透明等核心需求。
三、数据库加密的价值
1、在被拖库后,避免因明文存储导致的数据泄露
通常情况下,数据库中的数据是以明文形式进行存储和使用的,一旦数据文件或备份磁带丢失,可能引发严重的数据泄露问题;而在拖库攻击中,明文存储的数据对于攻击者同样没有任何秘密可言——如Aul、MyDul等很多成熟的数据库文件解析软件,均可对明文存储的数据文件进行直接分析,并输出清晰的、结构化的数据,从而导致泄密。
数据库加密技术可对数据库中存储的数据在存储层进行加密,即使有人想对此类数据文件进行反向解析,所得到的也不过是没有任何可读性的“乱码”,有效避免了因数据文件被拖库而造成数据泄露的问题,从根本上保证数据的安全。
2、对高权用户,防范内部窃取数据造成数据泄露
主流商业数据库系统考虑到初始化和管理的需要,会设置以sys、sa或root为代表的数据库超级用户。这些超级用户天然具备数据访问、授权和审计的权限,对存储在数据库中的所有数据都可以进行无限制的访问和处理;而在一些大型企业和政府机构中,除系统管理员,以数据分析员、程序员、服务外包人员为代表的其他数据库用户,也存在以某种形式、在非业务需要时访问敏感数据的可能。
数据库加密技术通常可以提供独立于数据库系统自身权限控制体系之外的增强权控能力,由专用的加密系统为数据库中的敏感数据设置访问权限,有效限制数据库超级用户或其他高权限用户对敏感数据的访问行为,保障数据安全。
J. 如何对数据库进行加密和解密
数据库账号密码加密详解及实例
数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用UserService对密码进行加密的时候,spring security 也是需要进行同步配置的,因为spring security 中验证的加密方式是单独配置的。如下:
<authentication-manager>
<authentication-provider user-service-ref="userDetailService">
<password-encoder ref="passwordEncoder" />
</authentication-provider>
</authentication-manager>
<beans:bean class="com.sapphire.security.MyPasswordEncoder" id="passwordEncoder">
<beans:constructor-arg value="md5"></beans:constructor-arg>
</beans:bean>
如上述配置文件所示,passwordEncoder才是在spring security对账号加密校验的地方。
spring security在拦截之后,会首先对用户进行查找,通过自己定义的userDetailService来找到对应的用户,然后由框架进行密码的匹配验证。
从userDetailService得到user以后,就会进入到DaoAuthenticationProvider中,这是框架中定义的 ,然后跳入其中的authenticate方法中。
该方法会进行两个检查,分别是
* preAuthenticationChecks : 主要进行的是对用户是否过期等信息的校验,调用的方法在userDetail中有定义的。
* : 这个就是用户名密码验证的过程了。
而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 encPass.equals(DigestUtils.md5DigestAsHex(rawPass.getBytes()));
}
}
这是我对其实现的一个简单版本,调用的就是spring自带的加密算法,很简单了,当然也可以使用复杂的加密方法,这个就靠自己了
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!