杂谈
Python正则表达式
re模块Python的正则表达式模块为re,可以使用import re导入,常用的正则表达式方法包括:
re.search(pattern, string, flags=0):在字符串string中搜索匹配正则表达式pattern的第一个位置,并返回相应的match对象。
re.match(pattern, string, flags=0):从字符串string的开头匹配正则表达式pattern,并返回相应的match对象。
re.findall(pattern, string, flags=0):返回字符串string中所有匹配正则表达式pattern的子串列表。
re.sub(pattern, repl, string, count=0, flags=0):将字符串string中所有匹配正则表达式pattern的地方替换成repl。
其中pattern为要匹配的正则表达式,可以包含字符集、特殊字符、模式修正符等。
原生字符串在 Python 中,字符串前面加上字母r表示这是一个”原生字符串”。原始字符串中的特殊字符(比如反斜杠\)会被当成普通字符对待,而不是转义字符。在正则表达 ...
杂谈
Java学习2
抽象类抽象类是一种不能被实例化的类,它的主要目的是为其子类提供公共的模板和基础实现。抽象类之所以能够提供这些共享方法和字段,是因为它定义了一些基本的结构和行为,而具体实现则由子类去完成。
当我们需要将一些有共同特征的对象进行抽象时,我们可以使用抽象类。
例如我们需要定义一系列图形类,比如矩形和圆形等,每个图形都具有计算面积和计算周长的方法,但具体实现方法可能不一样。我们可以定义一个抽象类 Shape 来表示这些图形的共同特征,并且提供一些方法的基本实现,具体的类可以继承这个抽象类并提供自己的实现:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647public abstract class Shape { public abstract double getArea(); //抽象方法,具体实现由子类定义 public abstract double getPerimeter(); //抽象方法,具体实现由子类定义 public vo ...
Crypto
RC4
加密原理
RC4 是一种对称加密算法。与其他几种比较常见的流密码不同的是,RC4 不是对明文进行分组处理,而是以字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。
RC4 算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为 1-256Byte(8-2048Bit),在如今技术支持的前提下,当密钥长度为 128Bit 时,暴力搜索密钥就不可行了。所以,RC4 的密钥范围任然可以在今后相当长的时间里抵御暴力搜索密钥的攻击。
RC4加密算法的原理如下:
密钥调度算法(KSA):在加/解密之前,需要使用一个密钥(Key)来初始化RC4算法的状态,生成一个有序的256字节的数组(S盒),用0-255装入长度256的S盒,用KSA打乱S盒。
伪随机数生成算法(PRGA):然后使用生成的S盒数组,与明文依次进行异或操作(由于RC4是一个流加密算法,因此需要先对明文进行分组,每个明文分组的长度为S盒的长度,以此保证明文和密钥的长度相等)。
异或完成后即得到密文。
名词解释密钥流:RC4 算法的关键是根据明文和密钥生成相应的密钥流,密钥流的长度 ...
CTF
CISCN2023复现
第一次打国赛,四个人没凑齐凑了三个人,不过打的还行,孩子打的很开心,明年还来(
Crypto基于国密SM2算法的密钥密文分发开靶机,nc 123.57.248.214 26759
下载附件,提供了一个SM2的介绍,阅读了解SM2算法以及本题的交互方式和流程:
用户建立连接,将个人信息上报服务器,并获取id;
用户使用SM2算法生成密钥对A(公钥A_Public_Key、私钥A_Private_Key),将密钥对A的公钥(A_Public_Key)传输给服务器;
服务器使用国SM2算法生成密钥对B(公钥B_Public_Key、私钥B_Private_Key)、同时产生16字节随机数C;服务器首先使用16字节随机数C对私钥B_Private_Key采用SM4ECB算法加密得到私钥B_Private_Key密文,然后使用A_Public_Key对16字节随机数C进行SM2加密得到随机数C密文;
服务器将公钥B_Public_Key明文、私钥B_Private_Key密文、随机数C密文传输给用户;用户向服务器请求密钥,服务器使用公钥B_Public_Key明文,对密钥D(16字节)采用S ...
杂谈
Reverse学习日记(一)
逆向工程简介逆向工程(Software Reverse Engineering),又称软件反向工程,是指从可运行的程序系统出发,运用解密、反汇编、系统分析、程序算法理解等多种计算机技术,对软件的结构、流程、代码等进行逆向拆解和分析,从而推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。
通常,人们把对软件进行反向分析的整个过程统称为软件逆向工程,把在这个过程中所采用的技术都统称为软件逆向工程技术。在CTF中的逆向,需要涉及Windows、Linux、Android平台的多种编程技术。
静态分析技术不执行程序条件下对源代码进行分析,找出代码缺陷。一般利用静态程序分析工具(例如IDA)将二进制可执行文件翻译成汇编代码或者c语言伪代码,通过对代码分析来破解文件。
动态调试技术动态调试是指利用调试器软件的运行来破解,观察程序在运行过程中的状态。注意关注代码流和数据流。
壳在计算机安全领域中,壳(Packers或Protection)指在一个程序外面包裹一段代码,保护里面的代码不被正确反编译或者非法修改,可以用于隐藏程序的功能和信息,常被用于保护软件的版权或防止软件被 ...
网站开发
JavaScript学习日记1
JavaScript简介js是运行在客户端的脚本(Script)语言。
js产生最初为了表单动态校验(密码强度检测),后来可以用来做网页特效,服务端开发,桌面程序,App,物联网,游戏开发。
浏览器分为渲染引擎和js引擎,渲染引擎可以用来解析html和css,js引擎用来读取js代码并处理后执行。
JS组成js组成分为三部分:
ECMAScript:JavaScript语法。
DOM:页面文档对象模型。(可以对页面上各种元素进行大小位置颜色等操作)
BOM:浏览器对象模型。(可以操作浏览器窗口:弹出框、控制浏览器跳转、获取分辨率等)
JS位置三种书写位置:行内、内嵌、外部。
1234567891011121314151617<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge& ...
CTF
LitCTF复现
2023.5.13-2023.5.14
拼凑的队随便打打总共解了38个题,4481分在一千多个队排118名,我反正是不大满意┗( ▔, ▔ )┛
不懂就问,这是MiHoYoCTF吗?
Web导弹迷踪你是一颗导弹,你需要,飞到最后!(通过6道关卡就能拿到flag哦~
不打游戏,直接F12找源代码,在game.js里找到flag:
123456789101112131415161718var Messages = { START: { title: getLevelString, text: function () {return 'CLICK TO BEGIN';} }, CRASH: { title: function () {return 'CRASHED';}, text: function () {return 'CLICK TO RETRY';} ...
杂谈
Java学习1
HelloWorld
12345public class HelloWorld{ public static void main(String[] args) { System.out.println("Hello World"); }}
需要保存为HelloWorld.java。(大小写敏感)HelloWorld作为标识符,由数字字母下划线美元符组成,不以数字开头,不能是关键字,区分大小写,运用驼峰命名法。
Java 程序由public static void main(String[] args)方法开始执行。
类描述一类对象的行为和状态,对象是类的一个实例。
方法就是行为,一个类可以有很多方法。
每个对象都有实例变量,能决定对象的状态。
注释1234567891011public class HelloWorld { /* 这是第一个Java程序 * 它将输出 Hello World * 这是一个多行注释的示例 */ public static vo ...
杂谈
python-PIL库学习
在之前的做题中了解过几次这个库,只是了解了一点皮毛,不过随着做题的增多越来越发现这个库的重要性,所以重点学习一下。
库简介1pip install PIL
PIL库是python中最常用的图像处理库。PIL库共包括多个与图片相关的类,这些类可以被看做是子库或PIL库中的模块,Image是最常用的类。
12345import PILfrom PIL import *from PIL import Image
库函数根据参数加载图片文件:Image.open(filename)
将图片加载之后可以读取图片的一些属性:
12345from PIL import Imageimg=Image.open('attach.png')print(img.mode,img.format,img.size)#RGB PNG (208, 208)
根据参数创建一个新的图像:Image.new(mode,size,color)
图像的组成元素是像素pixel,每一个像素都有明确的位置和被分配的色彩数值。
对于图片模式mode,常用的有:“L”为灰色图像、“RGB”为真彩色图像、“ ...
Crypto
LFSR
LFSRLFSR(线性反馈移位寄存器)属于FSR反馈移位寄存器的一种,另一种为NFSR(非线性反馈移位寄存器)。
LFSR使用明文二进制位作为密钥流发生器的种子,生成密文。
反馈寄存器(FSR)是流密码产生密钥流的一个重要组成部分,在模$2$有限域上的一个$n$级的FSR通常由$n$个二元存储器和一个反馈函数组成。
当反馈函数为线性时,就称为LFSR(线性反馈移位寄存器),反馈函数可以表示为:
f(a_1,a_2,...)=c_na_1\oplus c_{n-1}a_2\oplus...\oplus c_1a_n例如,假设一个五级的LFSR,初始状态为$(a_1,a_2,a_3,a_4,a_5)=(1,0,0,1,1)$,反馈函数为$f(a_1,a_2,a_3,a_4,a_5)=a_4\oplus a_1$,过程表示为:
然后会将反馈函数计算值作为$a_6$放在末尾,并且将$a_1$输出。
注意到$a_6=a_4\oplus a_1=0$,即为$a_n=a_{n-2}\oplus a_{n-5}$,所以可以通过表达式推出剩下的数值,通过计算发现从32位开始的数据开始呈现周期性变化 ...