Git自动化合并多个Commit
当我们有多个commit或者从开源处拿到多个commit时,想合成一个commit,并保留每个commit的message时,大家都知道用”git rebase -i”可以解决,但这种方式需要手动进行操作,假如我们要处理的比较多,就想要自动化来处理,下面介绍下怎么自动化处理。
git rebase逻辑
当我们”git rebase -i”后,git在当前.git/rebase-merge目录下生成git-rebase-todo文件,然后调用git editor来让用户编辑git-rebase-todo文件进行处理,如果实现自动化就需要:
修改git editor来使用我们提供的;
脚本来处理进行git-rebase-todo文件的处理。
git editor的修改
...
openssl AES密钥和iv长度问题分析
在做filecrypt项目时花费时间最多的是AES256算法的调试上,出现的问题是:
调用完加密函数然后直接调用解密函数,这样是可以正确解密的,但是调用完加密函数后将密文保存在文件后,然后重新使用程序进行解密却是无法正常解密,本文分析下该问题的原因。
例子
int aes_encrypt_common(uint8_t *input, uint64_t length, const unsigned char *password,
const unsigned char *iv, uint8_t *out, uint64_t *out_length);
int aes_decrypt_common(uint8_t *input, uint64_t length, co...
error:Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it … 解决方案
python通过pip或者源码来安装某些模块时,这些模块包含有c/c++源码,安装过程会调用本地的编译器编译这些代码。在Windows平台下我安装时候的错误消息是“error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27” 可以看出错误是由于没有找到该vc版本,对应的是vs2008,当然一种解决方法是安装该版本,但我已经安装了vs2015,所以我就需要修改下默认的这种配置。
android签名证书文件的解析和签名校验的加强
这篇文章介绍了apk中META-INF目录下CERT.RSA文件的解析,以及签名校验加强的一些方法。并用C++实现了解析代码,代码地址:https://github.com/liwugang/pkcs7.
3-Longest Substring Without Repeating Characters @LeetCode
题目
题目中得到的信息有
一段字符串找出不重复子串的最大长度,只需要长度信息。
思路
肯定是需要将字符串遍历一遍,在遍历过程中就需要查找前面字符串是否出现该字符,因此这是该算法的重点。若没找到,长度加一,若找到了,长度会从前面该字符位置+1处开始算起。下面以图来说明:
假如我们以begin为子串的开始,current表示当前处理的位置。1)当前位置的字符没有出现在[begin,current)的区间内,说明将该值加入到区间内满足没有重复条件,长度加一;
2)若当前值已经在该区间内,加入后肯定会出现重复,则应该将begin移动到没有该值的最左边位置,图中 new begin位置满足该条件。
在移动begin之前首先需要判断[begin, current)是否是现有的最大长...
1-Two Sum @LeetCode
题目
思路
题目中得到的信息有
都是整数,并且可正可负,也可一个值包含多个;
只有一个正确的结果。
方法一
最直接的思路就是两重循环遍历,时间复杂度是O(n^2),这样肯定不行。
方法二
由于是乱序的,1)可以先排序,2)然后再遍历一遍就可以找到结果。排序的话不能再原来的基础上进行,这样就破坏了下标顺序,因此需要申请额外的空间,用于保存他们的索引,然后再该空间上进行排序。时间复杂度是[排序O(logn) + 查找O(n)],空间复杂度是O(n)。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, in...
2-Add Two Numbers @LeetCode
题目
思路
题目中得到的信息有
这是两个非负数,每位分别保存在链表的一个结点上;
逆序保存,从低位到高位依次。
一般整数的相加都是从低往高进行,和保存的顺序一致,因此一次遍历就可完成,可以看出这道题目不难。
C算法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *ret, *p, ...
LEB128相关知识
介绍
LEB128(little endian base 128)是一种变长的整数压缩编码形式,它是出自于DWARF debug file format。在Android的Dalvik Executable format中使用该编码用于表示32位整数。由于32位整数占用固定的4个字节,可能大多数整数并不需要4个字节,最高几个字节可能为0(正数)或者为1(负数),该编码就是不保存最高位的这些字节。
原理
LEB128的表现形式都是一样的,如下面表格所示,由于是little endian,因此是从低字节到高字节。每个字节中的最高bit是标识信息,1表示还有后续字节,0表示结束,后面7bits是有效数据。将多个字节的该7bits从低到高组合起来就是所表示的整数。
LEB128分成有符号数...
类似py2exe软件真的能保护python源码吗
背景
最近写了个工具用于对项目中C/C++文件的字符串常量进行自动化加密处理,用python写的,工具效果不错,所以打算在公司内部推广。为了防止代码泄露就考虑不采用直接给源码方式,而python二进制脚本pyc和pyo,虽然提供的不是源码,但可以通过uncompyle2直接得到源码。通过网上资料发现有Windows下的py2exe、Mac下的py2app和跨平台的PyInstaller工具都可以将python脚本打包成可执行文件,第一反应应该满足需要,但有些不放心,故亲自尝试和分析了这些工具。
42 post articles, 5 pages.