工作中使用到的文件及转换技巧
在做文件处理的时候,我们经常会使用到压缩,加密,校验
压缩:就是对数据以一种更省字节的方式做一个无损转换,举例字符串AAAAAAAAA,我们需要9个字符,我们用9*A来表示的时候,只需要3个字符,常用的文件压缩的工具有zip, tar
加密:就是对数据做一个映射或其它复杂的可逆转换,举例字符串AAAAAAAAA,我们通过一个映射表(密码规则),把数据转换成了aaaaaaaaa,这时数据跟原来的数据不一样了,但是可以通过逆向的方式还原出原来的数据,常用的相关的工具有base64, xdd, 及一些rsa, des等加密工具
校验:就是对数据取一个指纹,通过一个循环计算得到一个简短的串,不同的数据流,得到的指纹数据是不一样的,比如AAAAAAAAA,我们用三个字符循环取与得到AAA,这时我们是无法根据结果恢复出原来的数据的,常用的取指纹工具有md5sum, sha256,crc等
功能使用
#####压缩
压缩就是用一定的技术手段,把数据中重复的的片段,精简的方式转换一下
把文件压缩
> tar czf settings.xml.tar.gz settings.xml
> du -shb settings.xml*
3810 settings.xml
856 settings.xml.tar.gz
解压缩文件
> tar -xf settings.xml.tar.gz
编码转换
编码转换有简单编码,还有加密,包括对称加密和非对称加密
编码
简单加密,类似base64, hex之类的,其实原则上不属于加密,只属于转换,就是把二进制的内容转换成64进制,或者16进制的
因为64进制或者16进制为可见字符,所以一般可以把不可见字符转换成可见字符,例如可以用base64把一个图片,或者文件转换成纯文本来拷贝一个文件
> base64 -w 2000 settings.xml.tar.gz
H4sIAAAAAAAAA+1XyW7bMBD1tfoKwXdL8pKlhqIAbdqgQNIacVr0yki0zVYWBZKy5UOBfnpH1GJJZpwYzXbggw+efYYzFEmOhSDRnFvpMuw8ExzA8WjU+ZsRf4zhyHH68JN8wMlwNOj0R87xiTM4HgxHHaffHw6OOqbzXAnVkXCBmGl2Fo5zNDp53x++RNC3A/ccGm+uMOOERmfdvuV0TRz5NIChOOt+v/3cO+2ee4bh8mJQTNCP+Fl3IUQ8tu0lWuHIQjHyF9iibG5PP93efvl6ObXBFTgzzArScJxyUhmv12trPZRmAxgI++f11RT8LFGPRNCWyMcNe07GXIqvqI+EzPdxWZj3qaU8sMvCelLVAlbXk1HdEMKENzimnAjKNt7F2F6uoh6rOK7dVjGM3JTOZiGJsDdDIceuXZK5MA6TOYkuGU1i7hUGtooZM5oSXNNp0hyzrHEFWWN5tVUDJgk8FnDIO8QoywbopkICZhFaYi9NU9euqKZSjDhfUxbkShW1jW23g+/Nhkco5gtKxcvkU1LV4i0JY1SSW4uct5uvjyPBUKjIVOZ1nY2V+bFUUuSasNArZhCyTa1FgtaYWD5d2ogJMkN+Nj2ZrCdntBcndyHxbSgeLJu+8iS/zbZZVZxa7WUpRp2sD9aMhLgxOgVvt/oArxSVV7tADqTZwla82RWWjtvl7kY5cJ2far3fZXCL/aKoroqDI3QX4sATLIF9VVLqnOz9/txiQ4gnipevQxwggScUatt4KFyjDYcS68x7ct2TTFbItrfFSh3e7MFB3R7odr+Jdu9IH9P6CaNB4oveRK56bwofYuIrzqHKRrY6LqzKb8P/91+dh+ojWytPD8VBQ1GTkMb5IoX5Jedm/9HRUnqNA+RJT+zK5xsepuKe+kDAvROxv2078uZ0yLttfv14xI3kV/AbbuunilsJtIWs5NtAkaIU4g+bCzxDSSiKRW5zd+0gnCfDZX9aVd0XMEs+xjApyhHPHyIwTDHUxyxOE+bjPIZa9KALeMTOsVC6KEQPuij//Mgfg0pfbZ12jxVFt1tb0dVtNO/ApOK2GlYI8ntok2XUmlBzYLjVq84zXvuFraGhoaGhoaGhoaGhoaGhoaGhoaGhofHy+AcKND6KACgAAA==
或者把文本还原成文件
> text="H4sIAAAAAAAAA+1XyW7bMBD1tfoKwXdL8pKlhqIAbdqgQNIacVr0yki0zVYWBZKy5UOBfnpH1GJJZpwYzXbggw+efYYzFEmOhSDRnFvpMuw8ExzA8WjU+ZsRf4zhyHH68JN8wMlwNOj0R87xiTM4HgxHHaffHw6OOqbzXAnVkXCBmGl2Fo5zNDp53x++RNC3A/ccGm+uMOOERmfdvuV0TRz5NIChOOt+v/3cO+2ee4bh8mJQTNCP+Fl3IUQ8tu0lWuHIQjHyF9iibG5PP93efvl6ObXBFTgzzArScJxyUhmv12trPZRmAxgI++f11RT8LFGPRNCWyMcNe07GXIqvqI+EzPdxWZj3qaU8sMvCelLVAlbXk1HdEMKENzimnAjKNt7F2F6uoh6rOK7dVjGM3JTOZiGJsDdDIceuXZK5MA6TOYkuGU1i7hUGtooZM5oSXNNp0hyzrHEFWWN5tVUDJgk8FnDIO8QoywbopkICZhFaYi9NU9euqKZSjDhfUxbkShW1jW23g+/Nhkco5gtKxcvkU1LV4i0JY1SSW4uct5uvjyPBUKjIVOZ1nY2V+bFUUuSasNArZhCyTa1FgtaYWD5d2ogJMkN+Nj2ZrCdntBcndyHxbSgeLJu+8iS/zbZZVZxa7WUpRp2sD9aMhLgxOgVvt/oArxSVV7tADqTZwla82RWWjtvl7kY5cJ2far3fZXCL/aKoroqDI3QX4sATLIF9VVLqnOz9/txiQ4gnipevQxwggScUatt4KFyjDYcS68x7ct2TTFbItrfFSh3e7MFB3R7odr+Jdu9IH9P6CaNB4oveRK56bwofYuIrzqHKRrY6LqzKb8P/91+dh+ojWytPD8VBQ1GTkMb5IoX5Jedm/9HRUnqNA+RJT+zK5xsepuKe+kDAvROxv2078uZ0yLttfv14xI3kV/AbbuunilsJtIWs5NtAkaIU4g+bCzxDSSiKRW5zd+0gnCfDZX9aVd0XMEs+xjApyhHPHyIwTDHUxyxOE+bjPIZa9KALeMTOsVC6KEQPuij//Mgfg0pfbZ12jxVFt1tb0dVtNO/ApOK2GlYI8ntok2XUmlBzYLjVq84zXvuFraGhoaGhoaGhoaGhoaGhoaGhoaGhofHy+AcKND6KACgAAA=="
> echo $text |base64 -d > settings.xml.tar.gz
也可以用xxd工具做类似操作
加密
我们可以借助openssl工具,来对文件进行加密解决操作,例如利用aes256进行加密,加密的时候,需要输入两次密码
> openssl enc -e -aes256 -in settings.xml -out settings.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
解密
> openssl enc -d -aes256 -in settings.enc -out settings.xml.1
enter aes-256-cbc decryption password:
对比文件,数据一致
> diff settings.xml settings.xml.1
也可以用其它的对称加密算法来进行加密,或者用非对称加密算法加密
校验
有时候,一个文件很大,或者文件是二进制的,我们想对比两个文件是否相同,这个时候可以使用md5sum,或者sha来对文件取个“指纹”信息,然后对比两个“指纹”是否一致来判定文件是否一致
> md5sum settings.xml*
c59bb5a770b9082d83eaf76abc687e09 settings.xml
c59bb5a770b9082d83eaf76abc687e09 settings.xml.1
>sha256sum settings.xml*
c308b1a8032405e9044546b5743a97bd96c61b2ab36370a01719a6417ba20f18 settings.xml
c308b1a8032405e9044546b5743a97bd96c61b2ab36370a01719a6417ba20f18 settings.xml.1
使用场景
有的时候,当我们无法使用scp的时候,我们可以通过base64把文件转换成字符串,然后到目标机器上再把字符串转换成文件
有的时候,当我们要校验两个MySQL数据库的表数据是否一致的时候,除了校验数据的值之外,也可以通过查询两边数据的checkSum值,如果checkSum值一致,一般就认为两边数据一致了
有的时候,当我们想看一个数据库中的binary的内容的时候,可能直接查询出来会显示乱码,甚至格式错乱,这个时候,我们可以使用hex函数来把内容显示出来
因此灵活使用一些数据转换工具或者函数,能解决很多很现实的问题
- 点赞
- 收藏
- 关注作者
评论(0)