您的位置:

java数据加密,java数据加密存储

本文目录一览:

java加密

可以的,但是对jar包直接加密,目前只支持J2SE,还不支持J2EE。更多的还是用混编器(java obfuscator)。下面是关于HASP的介绍。

-----------------------------------------------------

针对java加密防止反编译的解决方案

众所周知,java开发语言提供了很方便的开发平台,开发出来的程序很容易在不同的平台上被移植,现在越来越多的人使用它来开发软件,与.net语言并驾齐驱。

Java有它方便的一面,同时也给开发者带来了一个不小的烦恼,就是保护程序代码变得困难,因为java语言编译和代码执行的特殊性,目前,除了HASP外,还没有一个更好的解决办法或保护方案,但如果不采取有力的措施,则自己辛辛苦苦开发出来的程序很容易被人复制而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱,以想达到防止反编译的目的,但是,这种方法在网上很容易找到相关的软件来重新整理,那么这个混编器工具也只能控制一些本来就没有办法的人,而对于稍懂工具的人几乎是透明的,没有任何意义。再说硬件加密锁,大多数厂商提供的加密锁只能进行dll的连接或简单的api调用,只要简单地反编译,就很容易把api去掉,这样加密锁根本起不了作用,那到底是否还有更好的解决办法呢?

现提供2种解决办法:

1、以色列阿拉丁公司的HASP HL加密锁提供的外壳加密工具中,有一个叫做数据加密的功能,这个功能可以很好的防止反编译而去掉api的调用,大家知道:硬件加密锁的保护原理就是让加密过的软件和硬件紧密地连接在一起,调用不会轻易地被剔除,这样才能持久地保护您的软件不被盗版,同时,这种方式使用起来非常简单,很容易被程序员掌握,要对一个软件实现保护,大约只需几分钟的时间就可以了,下面简单介绍一下它的原理:

运用HASP HL的外壳工具先把java解释器进行加密,那么,如果要启动这个解释器就需要有特定的加密锁存在,然后,再运用外壳工具中的数据加密功能把java程序(CLASS或JAR包)当作一个数据文件来进行加密处理,生成新的java程序(CLASS或JAR包),因为这个加密过程是在锁内完成的,并采用了128位的AES算法,这样,加密后的java程序,无论你采用什么样的反编译工具,都是无法反编译出来的。您的软件也只有被加密过的java解释器并有加密锁的情况下才能正常运行,如果没有加密锁,程序不能运行,从而达到真正保护您的软件的目的。

2、HASP HL提供专门针对java外壳加密工具,直接加密jar包,防止外编译,目前只支持J2SE,将来会进一步支持J2EE,如果情况适合则是最简单的方法。

java加密的几种方式

基本的单向加密算法:

BASE64 严格地说,属于编码格式,而非加密算法

MD5(Message Digest algorithm 5,信息摘要算法)

SHA(Secure Hash Algorithm,安全散列算法)

HMAC(Hash Message Authentication Code,散列消息鉴别码)

复杂的对称加密(DES、PBE)、非对称加密算法:

DES(Data Encryption Standard,数据加密算法)

PBE(Password-based encryption,基于密码验证)

RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)

DH(Diffie-Hellman算法,密钥一致协议)

DSA(Digital Signature Algorithm,数字签名)

ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)

代码参考:

/**

* BASE64加密

*

* @param key

* @return

* @throws Exception

*/

public static String encryptBASE64(byte[] key) throws Exception {

return (new BASE64Encoder()).encodeBuffer(key);

}

/**

* MD5加密

*

* @param data

* @return

* @throws Exception

*/

public static byte[] encryptMD5(byte[] data) throws Exception {

MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);

md5.update(data);

return md5.digest();

}

/**

* SHA加密

*

* @param data

* @return

* @throws Exception

*/

public static byte[] encryptSHA(byte[] data) throws Exception {

MessageDigest sha = MessageDigest.getInstance(KEY_SHA);

sha.update(data);

return sha.digest();

}

}

/**

* 初始化HMAC密钥

*

* @return

* @throws Exception

*/

public static String initMacKey() throws Exception {

KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);

SecretKey secretKey = keyGenerator.generateKey();

return encryptBASE64(secretKey.getEncoded());

}

/**

* HMAC加密

*

* @param data

* @param key

* @return

* @throws Exception

*/

public static byte[] encryptHMAC(byte[] data, String key) throws Exception {

SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);

Mac mac = Mac.getInstance(secretKey.getAlgorithm());

mac.init(secretKey);

return mac.doFinal(data);

}

java项目如何加密?

Java基本的单向加密算法:

1.BASE64 严格地说,属于编码格式,而非加密算法

2.MD5(Message Digest algorithm 5,信息摘要算法)

3.SHA(Secure Hash Algorithm,安全散列算法)

4.HMAC(Hash Message Authentication Code,散列消息鉴别码)

按 照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)

常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。

主要就是BASE64Encoder、BASE64Decoder两个类,我们只需要知道使用对应的方法即可。另,BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。

MD5

MD5 -- message-digest algorithm 5 (信息-摘要算法)缩写,广泛用于加密和解密技术,常用于文件校验。校验?不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都 是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文 件是否一致的。

HMAC

HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个 标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证 等。

如何用java对数据加密,生成的密文是唯一的

用户提供的是明文,数据库里面存储的是密文

不管怎么样,加密也好,解密也好,如果要比较相等性,这两个过程肯定要有一个,这个是没有选择的,需要提高性能的话只能做两点:

1、将用户的明文加密为密文后再与数据库中的比较,原因是这样只加密一次就可以,如果解密的话就要把数据库的密文全部解密,这是不现实的

2、在密文所在的列上建立索引,增加搜索速度,这个速度增长是很显著的,虽然会失去一些插入性能。

3、将对应的SQL写成存储过程。省去预编译的时间。这个速度的提高也是很明显的。

至于你说的“怎么能保证不一样得明文加密后生成不一样得密文”

MD5就可以

MD5有两个特性:

1、任意两段明文数据,加密以后的密文不会是相同的

2、任意一段明文数据,经过加密以后,其结果永远是不变的

网上MD5加密的类应该有写好的

大致上方法就是这样了,都做到的话应该没有问题了,不会影响你的性能的