java jdbc连接mysql数据库 如何实现用户名密码以及传输数据的加密?
如题我没有弄数据库连接池应该也用不到所希望的就是传输过程中实现加密入库时为正常数据转换成2进制的方法就不予以考虑了本人还是菜鸟级别选手望各位高手能回答的详细一些最好有实用...
如题 我没有弄数据库连接池 应该也用不到 所希望的就是传输过程中实现加密 入库时为正常数据 转换成2进制的方法就不予以考虑了 本人还是菜鸟级别选手 望各位高手能回答的详细一些 最好有实用的代码 感激不尽啊!
最希望看到的两种形式就是一是在jdbc的配置中实现加密 二是会不会有一个jar专门实现这种功能的?
忘了说一项就是这个东西做出来不是我要用的 而是给别人用的 而且别人是不能知道数据库密码的 我有一个远程数据库的普通用户名密码 展开
最希望看到的两种形式就是一是在jdbc的配置中实现加密 二是会不会有一个jar专门实现这种功能的?
忘了说一项就是这个东西做出来不是我要用的 而是给别人用的 而且别人是不能知道数据库密码的 我有一个远程数据库的普通用户名密码 展开
6个回答
展开全部
你的问题很不清晰。
java jdbc连接mysql数据库
如何实现用户名密码以及传输数据的加密
你是要加密保存的数据,还是加密连接信息?
如果是连接串中的用户名与密码进行加密。恐怕用起来很不方便。
我就当你是要把入库的信息加密。
下边是DES加密的方法。将数据进行DES加密,将加密内容转为16进制内容表示。
--------------------------------------------------------------------------------------------
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class DesTest {
public static void main(String[] args) throws Exception {
// 要加密的数据
String str = "123456";
// 密钥
String strKey = "86337898";
SecretKeySpec key = new SecretKeySpec(strKey.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] byteFina = cipher.doFinal(str.getBytes());
String strFinal = byte2Hex(byteFina);
System.out.println(strFinal);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decByte = hex2Byte(strFinal);
byte[] result = cipher.doFinal(decByte);
System.out.println(new String(result));
}
public static String byte2Hex(byte[] buff) {
String hs = "";
for (int i = 0; i < buff.length; i++) {
String stmp = (Integer.toHexString(buff[i] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
}
return hs;
}
public static byte[] hex2Byte(String str) {
int len = str.length() / 2;
byte[] buff = new byte[len];
int index = 0;
for (int i = 0; i < str.length(); i += 2) {
buff[index++] = (byte) Integer
.parseInt(str.substring(i, i + 2), 16);
}
return buff;
}
}
java jdbc连接mysql数据库
如何实现用户名密码以及传输数据的加密
你是要加密保存的数据,还是加密连接信息?
如果是连接串中的用户名与密码进行加密。恐怕用起来很不方便。
我就当你是要把入库的信息加密。
下边是DES加密的方法。将数据进行DES加密,将加密内容转为16进制内容表示。
--------------------------------------------------------------------------------------------
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class DesTest {
public static void main(String[] args) throws Exception {
// 要加密的数据
String str = "123456";
// 密钥
String strKey = "86337898";
SecretKeySpec key = new SecretKeySpec(strKey.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] byteFina = cipher.doFinal(str.getBytes());
String strFinal = byte2Hex(byteFina);
System.out.println(strFinal);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decByte = hex2Byte(strFinal);
byte[] result = cipher.doFinal(decByte);
System.out.println(new String(result));
}
public static String byte2Hex(byte[] buff) {
String hs = "";
for (int i = 0; i < buff.length; i++) {
String stmp = (Integer.toHexString(buff[i] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
}
return hs;
}
public static byte[] hex2Byte(String str) {
int len = str.length() / 2;
byte[] buff = new byte[len];
int index = 0;
for (int i = 0; i < str.length(); i += 2) {
buff[index++] = (byte) Integer
.parseInt(str.substring(i, i + 2), 16);
}
return buff;
}
}
更多追问追答
追问
先感谢您能这么认真阅读我的问题
我想要的是连接时的密码需要加密 比如我传输的是很多的insert语句 这些信息我也不想让任何人获取
您这个方法是对我的原始insert语句进行加密 我还想如何在数据传过去后进行解密 解密成原始insert语句入库 根据您的方法 现在的问题是1,如何对连接密码进行加密 2,如何进行解密 3,在代码的什么阶段进行解密 获取Connection前进行加密? 获取PreparedStatement前进行解密? 问题多了 见谅啊
追答
问题多倒不怕,就怕你自己也思路不清。
一个一个来吧。
首先我觉得你的做法挺怪的。
1.如果你不想让别人知道你连接数据库的用户我与密码,
比如
jdbc:mysql://localhost/myDB?user=soft&password=soft1234
如果这样的串,那么建议你整个字符串进行加密解密。
如果是分开的,即
jdbc:mysql://localhost/myDB
user=soft
password=soft1234
三个参数进行连接,那么你就只对密码进行加密解密。
你这个是要给别人用的,那就将这些内容写到一个配置文件里,密码给出的是加密后的,
你读到程序里再解密进行连接。
如何进行解密,
这个真不知道怎么说,在你需的时候,拿到了加密的串,调用解密的方法,就可以得到还原的串,然后进行你要进行操作就可以了。
应该是 取Connection前进行。
我对你的传输进行加密不是很理解。
你这个是WEB程序,还是应用程序?
展开全部
如果jdbc和mysql都支持 SSL那通过配置就可以了
如果不支持,那也可以自己来实现。
实现思路:
1、在数据库的主机上运行一个java服务,用来转发数据这个服务我们成为A服务
2、客户端并不直接访问数据库,而访问A服务,客户端和A服务之间的传输代码由用户自己完成,当然可以加密。走套接字,走http,或者其他什么都是可以的。
如果不支持,那也可以自己来实现。
实现思路:
1、在数据库的主机上运行一个java服务,用来转发数据这个服务我们成为A服务
2、客户端并不直接访问数据库,而访问A服务,客户端和A服务之间的传输代码由用户自己完成,当然可以加密。走套接字,走http,或者其他什么都是可以的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个加密算法是比较简单的了 ,直接用就OK了
public class MessageDigestUtil {
public static String digestByMD5(String str) throws Exception{
//采用MD5加密算法,将任意长度字符串加密
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bts = md.digest(str.getBytes());
//采用Base64算法,将加密后的字节变成字符串
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(bts);
}
public static void main(String[] args) throws Exception{
System.out.println(digestByMD5("abc"));
System.out.println(digestByMD5("1231233223"));
System.out.println(digestByMD5("a"));
}
}
public class MessageDigestUtil {
public static String digestByMD5(String str) throws Exception{
//采用MD5加密算法,将任意长度字符串加密
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bts = md.digest(str.getBytes());
//采用Base64算法,将加密后的字节变成字符串
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(bts);
}
public static void main(String[] args) throws Exception{
System.out.println(digestByMD5("abc"));
System.out.println(digestByMD5("1231233223"));
System.out.println(digestByMD5("a"));
}
}
追问
我从来没用过加密 得多请教一下 您这个类如果加密了密码 那么还能实现连接数据库吗
还有一个问题就是 如果对传输数据进行了加密 那么如果是一条insert语句 那么需要进行解密执行入库吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的意思是你的数据在入库之前是不加密的,但在入库的路上是加密的,到了数据库里又是不加密的是把,除非神经有问题,否则没有这么干的
追问
。。。。我也从来没接触过这东西~ 就是别人安排的活~ 目的是为了不让别人在中途获取到重要数据~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在保存数据的时候采用md5加密,不就行了,传输过程中他就是密文了,数据库中也是密文,
更多追问追答
追问
您能有方法可以传输的时候是密文 数据库中不是密文吗?
如果没有也没关系 那就想问一下md5可以把连接密码也加密吗? 加密后还能连接数据库吗? 比如我传的是插入语句 如果插入进去 那么查出来的时候还能解密吗? 问题有点多 见谅啊
追答
可以呀, 存的是时候加密,读的是时候解密
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询