📦GPG加解密操作和数字签名基础流程学习

加解密 以发送方和接收方表示两边 简单流程概括 接收方生成密钥对,导出公钥分享给发送方。 发送方接收公钥,导入公钥。使用公钥对数据进行加密,发送给接收方。 接收方使用私钥对数据进行解密。 情境操作 情景代入:xiang需要发送一份重要文件给yalois 接收方:yalois 发送方:xiang yalois生成密钥对(如果yalois没有的话) gpg --full-generate-key 按照提示选择密钥类型、大小、过期时间等,最后输入用户信息和密码。 这里是Yalois的基本信息。 生成之后可以通过gpg --list-keys来列出密钥。 yalois导出公钥给xiang。 gpg --export [用户ID] > public_key.asc 这个导出的是二进制数据。 可以用gpg --export -a [用户ID]> public_key.txt以ASCII码导出。 GPG有网络上专门储存用户公钥的服务器。我直接发送给了xiang。 xiang导入Yalois的公钥 gpg --import [密钥文件] 4.xiang使用公钥对文件进行加密发送 gpg --encrypt --recipient [公钥用户ID] [加密文件] message.txt Yalois是这个世界上最帅的人。 我用gpg --encrypt --recipient Yalois message.txt用Yalois的公钥加密。 会生成message.txt.gpg文件。把这个文件发给Yalois。 Yalois对xiang发来的文件进行解密 gpg --decrypt message.txt.gpg 解密会要求输入创建密钥对时设置的密码。 GPG对文件进行数字签名 原理: 数字签名的工作过程通常包括以下步骤: 1. 生成哈希:对消息内容生成一个哈希值(摘要),这个哈希值是消息内容的唯一表示。 2. 加密哈希:使用发送者的私钥对哈希值进行加密,生成数字签名。 3. 发送消息:将 原始消息 和 数字签名 一起发送给接收者。 4. 验证签名:接收者使用发送者的公钥解密数字签名,得到哈希值,并对接收到的消息重新生成哈希值。若两个哈希值匹配,则验证成功,表明消息未被篡改且确实来自发送者。 gpg --sign message.txt #对文件进行签名 生成message.txt.gpg签名文件 gpg --verify message.txt.gpg #验证文件签名 可以发现,在数字签名中,使用私钥进行加密的。这确保有公钥的每个人都能解密。 ...

October 8, 2024 · 1 min · Yalois

🔧[工具安利]stego-toolkit---隐写工具集

工欲善其事,必先利其器。CTF的工具种类有点多,可能会遇到比如环境异常、转移不方便、依赖版本不同等问题,换个系统经常需要重新配工具,下面的这个github项目把工具封装成了docker镜像,即开即用。不需要再考虑python工具的依赖和版本问题。 Github地址:https://github.com/DominicBreuker/stego-toolkit 这个工具集包含了如下工具: 通用筛查工具:file、exiftool、strings、foremost、pngcheck、identify、ffmpeg 隐写探测工具:stegoveritas、zsteg、stegdetect、stegbreak 隐写工具:AudioStego、jphide/jpseek、jsteg、mp3stego、openstego、outguess、spectrology、stegano、steghide、cloackedpixel、LSBSteg、F5、stegpy GUI隐写工具:Steg、Steganabara、Stegsolve、SonicVisualiser、Stegosuite、OpenPuff、DeepSound、cloackedpixel-analyse 作者还贴心的标注了工具对应操作的文件类型、工具描述和简短的使用方法。 如果想看的更详细可以去github项目看README文件,然后分享一份我让GPT汉化的README_ZH文件。 链接: https://pan.baidu.com/s/1vmrAJ3_jrY8iZTbTDf35zA?pwd=6r3d 提取码: 6r3d 再介绍一下我的使用方法。 alias "stego-toolkit-run"="echo \"----------\nYalois提醒\n进入后执行start_ssh.sh\n在宿主机执行:\nssh -X -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost -p 22222\n就可以连接能够使用gui的 容器了\nssh端口映射到本地22222\n挂载当前目录的data目录到容器\n----------\";docker run -it --rm -v $(pwd)/d ata:/data -p 127.0.0.1:22222:22 dominicbreuker/stego-toolkit /bin/bash;" 我是先在我的shell里先用alias定义一个别名stego-toolkit-run,在shell输入之后,会执行下面的内容,因为我比较懒(不想找使用方法,记性还不好)。所以说先echo了一些信息, 第二各命令则是使用docker启动,看下参数, --rm 一次性容器,用完自动删除 -v $(pwd)/data:/data映射当前工作目录的data到容器的data目录,方便容器和主机的文件交互。 -p 127.0.0.1:22222:22这个就是把22端口映射到自己电脑的22222,方便后面ssh连接显示GUI应用。 如果不用gui应用是不用执行start_ssh.sh的。 工具是我这种菜狗CTF选手的命脉,还有没有别的同类应用,求分享!!

October 7, 2024 · 1 min · Yalois

Python星号*的更多用法

1. 乘法运算符 乘法print(5*3) » 15 幂乘 print(2**3) » 8 2. 字符串/列表 重复 >>> print('a'*10) aaaaaaaaaa >>> print([1,2,3]*3) [1, 2, 3, 1, 2, 3, 1, 2, 3] 3.打包 *作形参时将传入的多个值打包成元组 def print_values(*args): for arg in args: print(arg) print_values(1,2,3,4) 输出>> 1 2 3 4 **作为形参时将传入的值打包为字典 def eg(**kwargs): for k,v in kwargs.items(): print(f'{k}={v}') >>> eg(a=1,b=2) a=1 b=2 ‘*’ 在赋值中打包列表或者元组 a, *b = [1, 2, 3, 4] print(a) # 输出: 1 print(b) # 输出: [2, 3, 4] 4.解包 ‘*’ 解包列表或元组中的元素,作为函数的参数。 def func(a, b, c): print(a, b, c) args = (1, 2, 3) func(*args) # 输出: 1 2 3 ‘**’ 解包字典中的键值对,作为函数的关键字参数。 def func(a, b, c): print(a, b, c) kwargs = {'a': 1, 'b': 2, 'c': 3} func(**kwargs) # 输出: 1 2 3 ‘*’ 用来合并序列元组和列表 list1=[1,2,3] tuple1=(4,5,6) merged=[*list1,*tuple1] #merged=[1,2,3,4,5,6] 这里解包之后到[]里了 ‘**‘用来合并字典 dict1 = {'a': 1, 'b': 2} dict2 = {'b': 3, 'c': 4} merged = {**dict1, **dict2} print(merged) # 输出: {'a': 1, 'b': 3, 'c': 4} 总结 函数定义时带星号的形参负责打包,而函数调用时传入函数的带星号的实参负责解包 参考 【Python摸鱼读物】*:别只把它当乘号,还能打包和解包 ...

September 27, 2024 · 1 min · Yalois

🔑Ubuntu系统下PBC库的安装

开学网络安全实验课程的老师要教椭圆曲线,首先就是配置PBC库,Linux作为我的主系统,必须是要配上的。 Ubuntu系统下PBC库的安装 0.编译前环境安装 sudo apt-get install m4 sudo apt-get install flex sudo apt-get install bison sudo apt-get install make 1.下载gmp和pbc并解压源码 pbc是依赖于gmp的,所以需要先安装gmp 下载gmp源码 官网:https://gmplib.org/ wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz 下载gmp-6.3.0.tar.xz,并解压 tar -xf gmp-6.3.0.tar.xz 下载pbc源码wget https://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz https://crypto.stanford.edu/pbc/download.html 继续解压 tar -zxvf pbc-0.5.14.tar.gz 2.编译安装gmp !!!可能会遇到gmp编译失败的问题,如果实在无法编译可以使用 sudo apt install libgmp-dev 来安装gmp,然后直接跳过这一步去编译安装PBC 依次执行列面的命令,如果没有出现error代表安装成功 cd gmp-6.3.0 ./configure make sudo make install ./configure最终结果如下 make最终结果如下 sudo make install最终结果如下 3.编译安装PBC cd .. cd pbc-0.5.14 ./configure make sudo make install ...

September 5, 2024 · 2 min · Yalois

CTF-MD5碰撞

题目 <?php $cmd=$_GET['cmd']; if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) { echo `$cmd`; } else { echo ("die"); } ?> 可以看到:a!==b并且md5(a)===md5(b) 工具:fastcoll 下载地址:https://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip 使用教程: 创建一个a.txt文件,输入任意内容 指令fastcoll_v1.0.0.5.exe -p a.txt -o 1.txt 2.txt 程序运行之后,1.txt和2.txt的内容不同,但是hash值相同 生成便于提交的URL编码的验证脚本 <?php function readmyfile($path){ $fh = fopen($path, "rb"); $data = fread($fh, filesize($path)); fclose($fh); return $data; } $a = urlencode(readmyfile("./1.txt")); $b = urlencode(readmyfile("./2.txt")); $aa=urldecode($a); $bb=urldecode($b); if ((string)$aa !== (string)$bb && md5($aa) === md5($bb)) { echo $a."\n".$b; } ?>

August 2, 2024 · 1 min · Yalois