精华内容
下载资源
问答
  • 本发明涉及数据加密领域,具体涉及一种数据库传输加密方法。背景技术:目前市面上常用的数据库传输加密方式是采用ssl连接的方式进行的,这需要的是前期对程序设计的时候就采用了ssl的连接方式进行,而如果程序设计...

    本发明涉及数据加密领域,具体涉及一种数据库传输加密方法。

    背景技术:

    目前市面上常用的数据库传输加密方式是采用ssl连接的方式进行的,这需要的是前期对程序设计的时候就采用了ssl的连接方式进行,而如果程序设计初期就没考虑到采用ssl加密连接方式,而采用普通的连接方式,后期修改程序的复杂度将非常大。采用ssl连接方式还需要配置秘钥,复杂度也非常的大。目前市面上解决此问题的方案大多是在中间加入物理的加密网关,需要增加一台设备,且成本较高。现有技术中针对数据库进行加密多采用加入一个物理的加密网关实现,虽然并不需要求改服务器和客户端的任何代码就能实现传输加密,但是成本较高,且需要串接到网络上,一旦网关出现问题,整个数据库连接就可能断掉。

    技术实现要素:

    本发明为了克服以上技术的不足,提供了一种不需要额外增加新的物理设备、成本低、实施简单的数据库传输加密方法。

    本发明克服其技术问题所采用的技术方案是:

    一种数据库传输加密方法,包括如下步骤:

    a).将netfilter钩子驱动加载到服务器Linux系统内核中形成服务器驱动;

    b).客户端采用API HOOK方式加载驱动形成客户端驱动;

    c).客户端驱动判断连接服务器端的流量是否为X端口,如果是X端口,客户端驱动将抓取到的数据包包体采用加密算法进行加密,如果不是X端口则直接放行;

    d).服务器驱动判断加密后的数据包是否为X端口,如果是服务器驱动将数据包的包体按照与加密算法对应的解密算法进行解密,如果不是X端口则直接放行;

    e)服务器端对需要返回客户端的数据包判断端口是否为X端口,如果是服务器驱动对数据包包体采用加密算法进行加密,如果不是X端口则直接放行;

    f)客户端对服务器返回的数据包判断是否为X端口,如果是客户端驱动按照与加密算法相对于的解密算法进行解密,如果不是X端口则直接放行。

    端口X为1024-65535范围区间的任意一端口。

    上述加密算法采用tea加密的方式进行,加密密钥为一个固定的key值。

    上述加密算法采用DES方式进行加密。

    本发明的有益效果是:本数据库传输加密方法除了满足数据在网络传输中加密的功能外,不需要更改客户的网络环境,也不需要修改客户已经实现的客户端和服务器程序,仅仅需要在客户端和服务器端加载数据加解密的驱动即可实现访问数据库的数据在网络传输中是加密的,保证了数据的安全性。

    具体实施方式

    下面对本发明做进一步说明。

    一种数据库传输加密方法,包括如下步骤:

    a).将netfilter钩子驱动加载到服务器Linux系统内核中形成服务器驱动,netfilter钩子驱动使用insmod将驱动加载到Linux系统内核中。b).客户端采用API HOOK方式加载驱动形成客户端驱动,驱动程序会将socket的send函数和recv函数进行HOOK。API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等。c).客户端驱动判断连接服务器端的流量是否为X端口,如果是X端口,客户端驱动将抓取到的数据包包体采用加密算法进行加密,如果不是X端口则直接放行。d).服务器驱动判断加密后的数据包是否为X端口,如果是服务器驱动将数据包的包体按照与加密算法对应的解密算法进行解密,如果不是X端口则直接放行。e)服务器端对需要返回客户端的数据包判断端口是否为X端口,如果是服务器驱动对数据包包体采用加密算法进行加密,如果不是X端口则直接放行。f)客户端对服务器返回的数据包判断是否为X端口,如果是客户端驱动按照与加密算法相对于的解密算法进行解密,如果不是X端口则直接放行。其中客户端对数据包进行加解密过程中并不是所有的数据包都需要进行缓存,只有符合X端口的数据包才需要将其包头去除,将包体提取出来进行缓存,缓存的包体按照加解密算法进行加解密,同时替换原报文中的包体,将数据包accept。其中服务器对数据包进行加解密过程中并不是所有的数据包都需要进行缓存,只有符合X端口的数据包才需要将其包头去除将包体提取出来进行缓存,缓存的包体按照加解密算法进行加解密,同时替换原报文中的包体,将数据包accept。除了满足数据在网络传输中加密的功能外,不需要更改客户的网络环境,也不需要修改客户已经实现的客户端和服务器程序,仅仅需要在客户端和服务器端加载数据加解密的驱动即可实现访问数据库的数据在网络传输中是加密的,保证了数据的安全性。

    进一步的,端口X为1024-65535范围区间的任意一端口。对数据包的加解密的重点是要可逆,因此加密算法采用tea加密的方式进行,加密密钥为一个固定的key值。如果要简单的加解密方式,加密算法也可采用DES方式进行加解密。

    展开全文
  • 先说MySql数据库传输图片 1.设计MySql数据库表 图片类型限制:  tinyblob:255个字符  blob:到65K字节  mediumblob:16M字节(我觉得选这个合适)  longblob:4GB 2.插入测试数据 现在说Java与MySql传输图片 有点...

    先说MySql数据库传输图片

    1.设计MySql数据库表
    图片类型限制:
      tinyblob:255个字符
      blob:到65K字节
      mediumblob:16M字节(我觉得选这个合适)
      longblob:4GB
    在这里插入图片描述
    2.插入测试数据
    在这里插入图片描述
    现在说Java与MySql传输图片
    有点懒,代码写到同一个类里了,做项目时记得把功能写到不同package

    3.数据库连接固定写法

    //连接数据库地址
        static String url = "jdbc:mysql://localhost:3306/products";     //数据库名
        static String root = "root";    //账号
        static String pwd = "12138";    //密码
        static {
            try {   //注册驱动
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        //数据库连接方法
        public static Connection getConn(){
            Connection conn = null;
            try {
                conn = DriverManager.getConnection(url, root, pwd);
                System.out.println("数据库连接成功!");
            } catch (SQLException e) {
                System.out.println("数据库连接失败!");
                e.printStackTrace();
            }
            return conn;
        }
    
        //数据库的关闭连接方法
        public static void closeConn(Connection conn){
            if (conn != null){
                try {
                    conn.close();
                    System.out.println("数据库连接关闭!");
                } catch (SQLException e) {
                    System.out.println("关闭数据库失败!");
                    e.printStackTrace();
                }
            }
        }
    

    (提醒一下,写完一个方法可以测试一下,缩小bug范围)

    4.Java与MySql的访问依赖流,设计图片转换成流的方法

    //计算机文件都是以二进制的形式存在,Java提供了一系列的流完成传输
        //读取获取输入流————用于插入
        public static FileInputStream readPicIn(String path){
            FileInputStream picInputStream = null;
            try {
                picInputStream = new FileInputStream(new File(path));  //File可以指定路径
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            return picInputStream;
        }/*readPicIn*/
    
        //读取图片获取输出流————用于读取
        public static void readPicOut(InputStream in,  String targetPath){
            File file = new File(targetPath);   //图片输出位置
            String path = targetPath.substring(0,targetPath.lastIndexOf("/"));  //分解出存放路径,最后一个/位于文件命之前
            if (!file.exists()){     //判断是否存在
                new File(path).mkdir(); //如果目标文件不存在,在该路径创建文件夹
            }
    
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(file);
                /*固定写法*/
                byte[] buff = new byte[1024];    //定义一个字节数组作为缓冲区。
                int len = 0;    //len记住读取读入缓冲区的字节数
                while((len = in.read(buff)) != -1){    //判断是否读到文件末尾
                    fos.write(buff, 0, len);    //从第一个字节开始,向文件写入len个字节
                }
                fos.flush();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            finally {
                if (fos!=null){
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }/*readPicOut*/
    

    5.从数据库读取图片

        //从数据库读取图片
        public static void picFromDB(){
    
            /*数据库存储的图片没有名称,要为图片命名需要在数据库另外开辟一个存储位置*/
    
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {   /*固定写法*/
                conn = getConn();   //连接数据库
                String sql = "Select name,picture from test where name = ?";  //不用*是方便书写代码时知道获取了哪些数据
                ps = conn.prepareStatement(sql);
                ps.setString(1, "love1.jpg");
                rs = ps.executeQuery();
                while(rs.next()){
                    String picName = rs.getString("name");
                    String targetPath = "res/" + picName;     //图片输出位置(我输出在项目的res文件夹)和图片名称
                    InputStream in = rs.getBinaryStream("picture");     //binary翻译是二进制————getbolo()方法不能转换成InputStream
                    readPicOut(in, targetPath);		//调用读取方法
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            finally{
                closeConn(conn);
                if (rs!=null){
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (ps!=null){
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }/*picFromDB*/
    

    MySql存取图片只是存取图片,要多开辟一个name存取图片名称
    在这里插入图片描述
    运行程序前:
    在这里插入图片描述
    运行后:
    在这里插入图片描述
    最后说Java获取本地图片
    重点就是获取到文件路径,所以通过new FileDialog()对象能打开本地文件——补充说该类的show()方法过时,改用setVisible(true);

    直接上代码了,太晚了想睡觉,自己悟吧~

     //从本地插入图片到数据库
        public void picInsertDB(){
    
            //简单写一个按钮实现该功能
            JFrame jFrame = new JFrame("测试窗口");
            jFrame.setSize(200, 200);
            jFrame.setLocationRelativeTo(null);   //居中显示
            jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jFrame.setVisible(true);
    
            FileDialog fileDialog = new FileDialog(jFrame, "本地文件");
    
            jFrame.setLayout(null);
            JButton btnLocal = new JButton("选择文件");
            btnLocal.setFocusable(false);
            btnLocal.setBounds(0, 50, 200, 100);
            jFrame.add(btnLocal);
    
            /*为按钮添加打开本地文件功能*/
            btnLocal.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    fileDialog.setVisible(true);
                    String filePath =  fileDialog.getDirectory() + fileDialog.getFile(); //文件夹路径+文件名称
                    //System.out.println(filePath);
                    FileInputStream in = null;
                    /*这里有个坑,fileDialog.getDirectory() + fileDialog.getFile()=null+null————因为是String存储,所以判断是nullnull*/
                    if (!filePath.equals("nullnull") ){
                        in = readPicIn(filePath);    //调用上方封装方法
                    }
                    if(in != null){    /*固定写法*/
                        Connection conn = null;
                        PreparedStatement ps = null;
                        try {
                            conn = getConn();
                            String sql = "insert into test (id, name, picture)" +
                                    "values(?,?,?)";
                            ps = conn.prepareStatement(sql);
                            ps.setInt(1, 3);
                            ps.setString(2, "gg.jpg");
                            ps.setBinaryStream(3, in, in.available());
                            //Binary翻译是二进制,因为getbolo()方法失败了,这里我没有尝试setbolo()行不行
    
                            int count = ps.executeUpdate();
                            if (count>0){
                                System.out.println("插入成功");
                            }else {
                                System.out.println("插入失败!");
                            }
                        } catch (SQLException ex) {
                            ex.printStackTrace();
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        } finally {
                            closeConn(conn);
                            if (ps!= null) {
                                try {
                                    ps.close();
                                } catch (SQLException ex) {
                                    ex.printStackTrace();
                                }
                            }
                        }/* if(in != null)*/
                    }
                }
            });
        }/*picInsertDB*/
    

    我是个喜欢听歌写代码的家伙,大家一起加油~

    关于Java组件布局位置的文章:
    https://blog.csdn.net/everything002/article/details/105904945
    关于Java访问MySql数据库的文章:
    https://blog.csdn.net/everything002/article/details/106203271

    展开全文
  • 数据库是共用的数据库 AWS的RDS数据库服务 目前数据库是在美国,站点服务器都是独立的,但是都是AWS的服务器,通过内网链接的是数据库 美国站点数据库速度还能接受,其他站点数据库就很尴尬了 希望能给点建设性的...
  • Navicat for MySQL可以控制数据库中的数据库表进行操作,如表结构、表数据等。两个不同的数据库,一个是另一个数据库的备份,需要对比表结构和表数据。如果表结构相同,需要同步表数据,用于备份。下面利用一个实例...

    Navicat for MySQL可以控制数据库中的数据库表进行操作,如表结构、表数据等。两个不同的数据库,一个是另一个数据库的备份,需要对比表结构和表数据。如果表结构相同,需要同步表数据,用于备份。下面利用一个实例说明操作过程,操作如下:

    506dcf45b2116435112dcdd475e62761.png

    1.第一步,打开Navicat for MySQL软件,查看数据库book和student,对比数据库表,如下图所示:

    474dc2e8ff303fc905f533343c9b035c.png

    2.第二步,对比结果发现这两个数据库有两张表一致,需要将book数据库的数据同步到student数据库;选中book数据库,选择“Tools”,点击“Data Transfer...”,如下图所示:

    8522c01c84fbf813f060b25c18794388.png

    3.第三步,选择目的源为CMP,Database为student,点击“Start”开始同步数据,如下图所示:

    d0c3c44e0f6c2f41704c7adf1d080dd5.png

    4.第四步,这时会弹出同步数据的提示,点击“OK”,确定通过,如下图所示:

    cab3d6d242644a42c4903a2912496ff3.png

    5.第五步,完成数据同步后,这时消息日志为运行成功,如下图所示:

    b85ea36fabe27c7edd8aacca8adf4b70.png

    6.第六步,查看数据库student,对应的表数据,可以看到表数据已经同步过来,如下图所示:

    a21591e785c987403eb234f424e4d98a.png

    说明

    注意Navicat for MySQL软件同步数据的过程

    注意需要数据库表结构一致才能同步数据

    展开全文
  • 数据库传输最大值

    2019-03-17 18:55:50
    在使用数据库的时候我们不免要传输音乐之类的文件,但是这样的文件的都是很大的(超过了数据传输文件的最大值) 遇到这样的问题,我们怎么来解决呢? 我们需要在数据库的my.ini文件中的最后加一句话: max_allowed_...

    在使用数据库的时候我们不免要传输音乐之类的文件,但是这样的文件的都是很大的(超过了数据传输文件的最大值)

    遇到这样的问题,我们怎么来解决呢?

    我们需要在数据库的my.ini文件中的最后加一句话:

    max_allowed_packet=10485760
    
    

    (10485760)这个值可以修改,这个值相当于64M,如果有更大的需求都是可以修改的~

    展开全文
  • 第一步.使用navicat premium(V12.1.0)连接本地数据库和远程数据库 ...选择工具菜单中的数据传输,打开下图数据传输窗口,填写必要的远程sqlserver数据库服务器信息 第三步.点击下一步完成数据库传输 ...
  • [数据库]MySQL加密02016-12-28 13:00:07MySQL字段加密和解密1.加密:aes_encrypt('admin','key') 解密:aes_decrypt(password,'key') 2.双向加密 通过密钥去加密,解密的时候的只有知道这个密钥的人来解密 加密:...
  • 选择要传输数据库点击右键----》数据传输-----》选择传输的目标
  • 解决PostgreSQL数据库传输出现ERROR: invalid byte sequence for encoding “UTF8“: 0xe5 0x9b 0x20
  • 自己做的小例子自己做的小例子自己做的小例子自己做的小例子
  • 有谁试过将服务器端的HSQLDB传输到客户端?...但是,现在的问题就是,怎么才能把服务器端的这个HSQLDB数据库传输过去。(服务器端的HSQLDB是在Standalone模式下生成的,只有两个文件),同时,还需要考虑数...
  • 个人感觉是属于一个给小程序开发者测试线上数据传输使用的测试数据库,用作正式数据库并不实用,但是测试产品性能确十分在行。 这里简单展示下,如何使用云数据库调用数据和生成页面,以及进行数据传输 首先,...
  • 数据库传输数据问题

    2012-02-24 13:47:55
    网络未连接时,将数据存在本地,网络连通时,将数据上传到服务器上的数据库,怎么实现? 两个数据库数据传输怎么实现?
  • model传输数据 method=“post”方法乱码 1、在web.xml加过滤器 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 CharacterEncodingFilter /* 2、还不行...
  • Navicat Premium数据传输时,出现了oracle数据库导入到mysql数据库中date的问题1426 - Too big precision 7 specified for column 'FILEDATE'. Maximum is 6.(oracle数据库中的date精度为7,mysql中为6,只能用...
  • 在url 后面添加这个就行 useUnicode=true&characterEncoding=utf-8 private static String url = "jdbc:mysql://localhost:3306/office?useUnicode=true&characterEncoding=utf-8";
  • 1.首先创建表tab_bin2.写完保存MP3文件到数据库的java代码于是抛了如下错误解决方法如下:找到自己mysql安装目录下的my.ini文件然后找到max_allowed_packet修改大小为适合大小之后重启mysql服务即可...
  • 参考:https://blog.csdn.net/fangkang7/article/details/83684228【PhpStorm】如何连接MySQL数据库 一直很苦恼,为什么我用php写的留言板,不能从html的用php传输到mysql里呢?用了三天时间,查百度,谷歌,还有...
  • 有多个异构的子数据库,并且事先并不知道他们的数据结构,怎么要实现子数据库向中央数据库传输数据?
  • 用透过数据库传输二进制文件

    千次阅读 2012-07-03 16:10:05
    //服务器 create table upd(bb image) insert upd(bb) select * from openrowset(bulk 'c:\Updater.exe', single_blob) a ...select DATALENGTH (bb) from ...//方法1:客户数据库 create table upd(bb image) i
  • 当我发现数据库中的中文字段都变成了问号时,第一时间修改数据库表中的字符类型并修改为utf-8,然后再进行插入数据时,表中的中文字符依旧是问号。查看mysql资料时,MySQL的默认编码是Latin1,不支持中文,支持中文...
  • ssl是Secure Socket Layer的缩写,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。一般通用之规格为40 bit之安全标准,...
  • 楼主最近遇到了困扰2小时的问题,如下: 是数据迁移,从mysql 到sqlserver时,会报’从字符串转换日期和/或时间时,转换失败’。网上查了很多方法 都不行。 最后发现是数据扥问题,也就是说mysql可以认0000-00-00 ...
  • 关于网上解决乱码的问题有许多也很成熟了,将mysql和他的可视化工具Navicat之间统一编码问题也有许多,本篇文章旨在回顾mysql与Navicat之间的统一编码的所有方式,和web应用中传输中文乱码做统一规划,由于本人水...
  • 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • 后来发现这种方法不行,应该这样:多用户访问同一资源时,若某人正在更改这一资源,写入数据库中的一个表。下一个人再想更改这一资源,先访问那个表,读取某个字段的值,来决定是否做下一步的操作。mysql数据库在...
  • 采用socket实现两台电脑的sqlite数据库传输。在本机上客户端接收到服务端的sqlite数据库数据库完整传输且可以打开数据不变。 而在两台电脑下。将客户端程序拷入第二台电脑。进行传输。发现数据库变大了。无法...
  • 解决方案:通过在控制器中添加过滤器,解决中文由jsp到action进而到数据库传输过程中出现的乱码问题。具体实现:web-app概述:该文件是所有的WEB APP共用的部署配置文件,每当一个WEB APP被DEPLOY,该文件都将先被...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,033
精华内容 6,013
关键字:

数据库传输