一种基于二维码的半自动文件拷贝方法

在一种受限的环境中,要把文件拷贝出去显然是不可能的。因为既不能进行直接的文本拷贝(Ctrl+C, Ctrl+V),又不能使用scp(因为网络隔离)。那么,真的一点办法都木有了吗?答案是否定的,因为毛主席说过,“卑贱者最聪明,高贵者最愚蠢”。作为一个好琢磨的程序员,因为好奇(“与天斗,其乐无穷;与地斗,其乐无穷;与人斗,其乐无穷。”),所以很快想出了一个解决的办法,那就是利用非常盛行的二维码技术。虽然全自动拷贝不好实现,但半自动拷贝还是非常容易做到的。于是,本文尝试利用base64编码/解码和二维码生成/识别实现一种半自动的文件拷贝方法并给出一个实例。

设受限的环境为jail,运行的OS为CentOS 7; 开放的环境为dora, 运行的OS为Ubuntu14.04LTS。既能访问受限环境jail和又能访问开放环境dora的平台为oba, 运行的OS为Windows 10。 于是,将jail:/tmp/foo拷贝到dora:/tmp/bar的实现步骤描述如下:

  1. 在jail中将需要拷贝的文件(jail:/tmp/foo)进行base64编码,设编码后的文件为foo.out,对应的md5字符串为foo.md5
  2. 在jail中使用Python脚本将foo.out的内容进行逐行扫描,每10行生成一个二维码图片,设生成的图片序列为foo_001.png, foo_002.png, ...
  3. 在jail中使用eog (GNOME image viewer)逐个打开二维码图片foo_001.png, foo_002.png, ...
  4. 在oba中使用截图工具将foo_001.png, foo_002.png, ...抓取保存到开放环境dora中去,存为bar_001.png, bar_002.png, ...
  5. 在dora中使用Python脚本逐个处理二维码图片bar_001.png, bar_002.png, ..., 将对应的文本依次存入文件bar_001.txt, bar_002_.txt, ...
  6. 在dora中将文本文件bar_001.txt, bar_002.txt, ...合并,设合并后的文件为bar.out
  7. 在dora中将bar.out进行base64解码,解码后的文件为/tmp/bar,对应的md5字符串为bar.md5
  8. 人工比对foo.md5和bar.md5, 如完全相同,则拷贝jail:/tmp/foo到dora:/tmp/bar大功告成

1. 生成二维码 (encode.py)

 1 #!/usr/bin/python
 2
 3 import sys
 4 import qrcode
 5
 6 def encode_image(s, img_file):
 7     img = qrcode.make(s)
 8     img.save(img_file)
 9
10 def main(argc, argv):
11     if argc != 3:
12         sys.stderr.write("Usage: %s <string> <image>\n" % argv[0])
13         return 1
14
15     s = argv[1]
16     img_file = argv[2]
17     encode_image(s, img_file)
18     return 0
19
20 if __name__ == ‘__main__‘:
21     argc, argv = len(sys.argv), sys.argv
22     sys.exit(main(argc, argv))

2. 识别二维码 (decode.py)

 1 #!/usr/bin/python
 2
 3 import sys
 4 import zbar
 5 import Image
 6
 7 def decode_image(img_file):
 8     scanner = zbar.ImageScanner()
 9     scanner.parse_config(‘enable‘)
10     pil = Image.open(img_file).convert(‘L‘)
11     width, height = pil.size
12     raw = pil.tostring()
13     image = zbar.Image(width, height, ‘Y800‘, raw)
14     scanner.scan(image)
15     data = ""
16     for symbol in image:
17         data += symbol.data
18     return data
19
20 def main(argc, argv):
21     if argc != 2:
22         sys.stderr.write("Usage: %s <image>\n" % argv[0])
23         return 1
24
25     img_file = argv[1]
26     s = decode_image(img_file)
27     print s
28     return 0
29
30 if __name__ == ‘__main__‘:
31     argc, argv = len(sys.argv), sys.argv
32     sys.exit(main(argc, argv))

3. 实例

3.1 jail中的文件/tmp/foo

3.2 对jail:/tmp/foo进行base64编码

时间: 2024-07-29 02:28:01

一种基于二维码的半自动文件拷贝方法的相关文章

SBVLC: 一种安全的基于二维码的可见光通信系统

SBVLC: Secure barcode-based visible light communication for smartphones, TMC (IEEE Transactions on Mobile Computing), 2015年3月 [1] http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=7061506&queryText%3DSBVLC 1.1. 背景 纽约州立大学布法罗分校.密歇根州立大学.

关于微信扫描二维码下载apk文件的细节设计

微信使用的人数越来越多,渐渐的用户形成了一种习惯,扫描二维码的时候,也会打开微信去扫描,但是微信不支持第三方的链接下载,有些厂商已经发现了这一特点,所以在使用二维码下载自家的app时,会做一个提示,引导用户如何通过微信扫描二维码下载自家的app,如下的例子: 华为的:http://www.dbank.com/netdisk/pages/wapLink/weixin.html 直接加个中间页面,进行说明提醒. 还有的会在页面上检测浏览器的类型,若是微信内部浏览器,直接弹出对话框,进行提示. 关于微

基于二维码的自适应安防巡逻系统

本作品采用嵌入式系统技术,结合无人机和二维码,借助开源计算机视觉库Open CV和机器人操作系统ROS,实现了室内大型场所的自适应安防巡逻.硬件方面,设计了 Parrot ardrone 2.0无人机作为载体,Minnow Board Turbot主板作为嵌入式核心版的系统.软件方面,编写了无人机飞行控制和图像处理的程序,利用PID控制算法实现了无人机的飞行控制. 整个系统包含无人机.二维码和主板,无人机是直接巡逻的工具,二维码给定飞行路线,主板放置于大型场所的房顶来与无人机通信实现控制.系统的

java实现二维码生成的几个方法

1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj 2: 使用BarCode4j生成条形码和二维码 BarCode4j网址:http://sourceforge.net/projects/barcode

Vue使用html2Canvas和canvas2Image下载二维码会模糊的问题解决方法

1 // 下载二维码图片的方法 2 saveImg() { 3 var self = this; 4 html2canvas(document.querySelector(".savePic"), { 5 scale: 5 // 缩放比例,默认是1 6 }).then(function(canvas) { 7 Canvas2Image.saveAsPNG(canvas, 400, 500, self.showName); 8 }); 9 }, 因为默认.savePic的大小并没有400

几种扫描二维码工具的User-Agent

微信: user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.6.1 NetType/WIFI Language/zh_CN 支付宝: user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) A

基于SignalR的消息推送与二维码描登录实现

1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于SinglarR消息推送机制的扫描登录.本系统涉及到以下知识点:     SignalR:http://signalr.net/ 这官网,ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当

PHP生成带logo图像二维码的两种方法

本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $urlToEncode="http://www.php.cn"; generateQRfromGoogle($urlToEncode); /**

如何用C代码生成二维码

当下因微信和支付宝等手机应用广泛使用,而基于二维码/一维条码的移动支付,也借助手机移动端席卷全国,使得越来越多的人知道有"二维码"这么一种东西. 对于普通用户而来,一般只知道将自己的二维码展示给别人,别人使用软件识别这个二维码即可完成一定的功能.比如,扫码二维码付款.扫码二维码加微信好友.扫码二维码访问网页.扫码二维码下载app等等.这些个功能,在日常行为中,已经很常见了,但作为程序猿的我们,我们怎么能不知道二维码是如何生成的呢?或者说,我要自己生成一个二维码,除了去网页上找二维码生成