Intelligence without ambition is a bird without wings.

2016-04-05
序列化

定义

将某种结构化(如struct)的数据转化为字节流

为什么需要序列化

  • 网络传输(如tcp是字节流)

  • 跨系统(不是利用程序语言本身提供的机制)存储(如存储到redis)

    • 比如c++中的stringstruct等,redis中无法直接保存,需要序列化后存储,然后再利用该数据,恢复相应结构
阅读此文

2016-03-31
libuser

用户,组信息管理工具

  • /usr/bin/lchfn
  • /usr/bin/lchsh
  • /usr/sbin/lchage
  • /usr/sbin/lgroupadd
  • /usr/sbin/lgroupdel
  • /usr/sbin/lgroupmod
  • /usr/sbin/lid

    查看用户组信息,组成员信息

  • /usr/sbin/lnewusers

  • /usr/sbin/lpasswd
  • /usr/sbin/luseradd
  • /usr/sbin/luserdel
  • /usr/sbin/lusermod

实例

  1. 添加用户到组

    lgroupmod -M wallace -- vboxsf
    
  2. 修改HOME

    sudo lusermod -d /vmdata/home/wallace/ wallace
    
阅读此文

2016-03-30
go-unittest

原理

通过一定的约定和组织来编写测试代码

go test命令遍历所有*_test.go文件,生成一个临时的main包来调用相应测试函数,然后构建并运行,报告测试结果,最后清理临时文件

要点

  • 所有测试代码文件以_test.go结尾

  • 功能测试以Test开头

  • 基准测试以Benchmark开头

  • 示例函数以Example开头

组织方式

白盒测试

测试文件与被测试文件属于同一个包

黑盒测试

测试文件包应为被测试包名+_test结尾

为了简化访问方式,可以采用匿名导入import . XXX

选项

  • -v

    打印所有输出
    

常用命令

  • 运行指定测试

    go test login_test.go
    

参考

  1. https://docs.ruanjiadeng.com/gopl-zh/ch11/ch11-01.html
阅读此文

2016-03-30
aes

要点

  1. 加密和解密的工作模式须一致

  2. key和iv(初始化向量)位数需要相同

  3. 加密iv和解密iv必须保持一致,随机iv用来使密文动态变化,增加破解难度

阅读此文

2016-03-30
gtest

选项

  • 当失败时,退出,打印堆栈

    --gtest_break_on_failure --gtest_catch_exceptions=0
    

– 指定VLOG级别,默认不打印VLOG信息

--v=NUM

编译

gtest默认安装到编译器搜索路径中

g++ hex.cpp hex_test.cpp -lgtest -lgtest_main
阅读此文

2016-03-28
go-gzip

阅读此文

2016-03-28
go-rsa

阅读此文

2016-03-28
openssl

常用命令

  • 生成RSA私钥

    openssl genrsa -out private.pem 1024
    
  • 根据私钥生成公钥

    openssl rsa -in private.pem -pubout -out public.pem
    
  • 直接明文查看

    openssl rsa -in private.pem -text -noout
    
  • 以ASN.1查看

    openssl asn1parse -in private.pem -noout
    
1
2
3
4
5
6
7
8
9
10
11
[I] /tmp openssl asn1parse -in private.pem 
0:d=0 hl=4 l= 606 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=3 l= 129 prim: INTEGER [N] :AD1B7BF5AE71D005A859BC0DD73FD5B18636B0022C22621A8BF8E422E1C2D31F1CC68321C3B5092E96A471BA343E2639F2B354A438DB10C978968E58FD637E4C5D91182B1B4628946D7E6DA3665172B9808C27FFEDB6EB371A55A5B724DCC8A1E8A5C8E88F34042A4D8D9FF17803683F52BBAAEE0922B8A3D6FC1A428FFB91B9
139:d=1 hl=2 l= 3 prim: INTEGER [E] :010001
144:d=1 hl=3 l= 128 prim: INTEGER [D] :7D64C8517A30C56023C804B9FDEF26AB76AE4CA6F6335DDF1EFF86BA61D10FBF9CC78B9BBCB979D23E9B162AACC74C4773B045A2C3F0A3E35D2FAA237A4144ED791951CCA5F89360E6163641CAC8ED769483644B6320D2C1569960C535DD50A765C5523E12BD44241AB23A217134EFA6DDE30DBF8C8BACF6A0D86F117F1DADA5
275:d=1 hl=2 l= 65 prim: INTEGER :DC514054FFE713A66213D7638E0EE9D23E69672CF35D14E9DBFBF8C4A888E1096A18BBDCEC6B11831FB3E11823BC271931C83E97DB58E71384FC33DC584F1FCB
342:d=1 hl=2 l= 65 prim: INTEGER :C924D2576E99412C4F4AA946352E24EDA76DEA5BD114A8282AFE1BB7B2BAF1484046291B293D9DB7F3662849202164EC923CDDBBAB95940E083EDA5BADF11C0B
409:d=1 hl=2 l= 65 prim: INTEGER :85C6C85B546F895CF41CBC227535D500966905FF235E97BE5097353CA46148D3A09A9827D35E47E9E8AC1EB7BBAB19CA9091D87FF8EE88912FA4BC10C58675F5
476:d=1 hl=2 l= 65 prim: INTEGER :A37CFE4A7A66AE86695C7201D2AFD2EC27AE3B52ADBA7083558E7CD0EEC0EBE4A1F964E7E2B9663C61E5A2D0ED00B79B61B17F384EDAA12056AB5FA82CD550C9
543:d=1 hl=2 l= 65 prim: INTEGER :B6E4F2280035C65B6D154BAB44E09877A61D069392B2A63C4F808F7D749CFD7FAEBE450B6E596761F5974885D9F43340FB272C1F57F168366E8F3AABDEAD6413
  • 获取N

    openssl rsa -in private.pem -modulus -noout
    
阅读此文

2016-03-28
ssh-keygen

  • 将pub格式转换为pem格式

    ssh-keygen -f id_rsa.pub -e -m pem >id_rsa.pub.pem
    
阅读此文

2016-03-24
fuser

实例

  • 根据端口杀死进程

    fuser 8080/tcp
    
阅读此文