为您找到搜索结果:2024个
php源码安全加密之PHP混淆算法
一.PHP的加密总体上来说分以下2种:1.扩展组件类加密,代表有:zend、ionCube、SG、php_screw、bcompiler、BZ2等.2.免扩展加密:php某盾等为代表的一批.二.他们的安全性?组件类加密:对于扩展加密,ZEND类为代表的是先编译成opcode再压缩执行.理论上没办法得到源代码.现在有一些ZEND破解,是通过OPCODE逆向转回PHP原代码,好的逆向效果在98%以上.不可能百分百,而php_screw等为代表的加密组件,是对源代码进地xor加密,DES加密等等.在运行时要先解密,这样的代码是可以百分百被破解的.免组件类加密:PHP某盾们,这一些都是在原有PHP代码上面增加一个外壳,类似于NET程序的加壳方法.执行时先通过壳来完成对原始代码的base64eval解压缩等操作.最终通过Eval执行.最致命此类代码可被劫持eval百分百还原.三.什么样的加密才安全?不加密才最安全.呵...这个没说一样.不过有一个想法,可以增加解密的难度.简要流程如下:加密过程:PHP源代码->PHP代码混淆器->加密(免组件外壳或组件加密)->加密成品源码.执...
c语言高斯模糊源码,C++实现纯高斯模糊算法处理灰度图片
实现功能:C++语言实现纯高斯模糊处理灰度图像,不受图片格式限制算法实现://////程序功能:c语言实现纯高斯模糊处理灰度图像///系统win7,VS2010开发环境,编程语言C++,OpenCV2.4.7最新整理时间whd2016.9.9。//////源图像数据在内存的起始地址。///源和目标图像的宽度。///源和目标图像的高度。/// 通道数,灰度图像cn=1,彩色图像cn=3///sigma的平方是高斯函数的方差///1:能处理8位灰度和24位图像。需要分开进行,后面会合成一个程序// 以下为参考函数实现的整个过程//(1)建立工程,复制粘贴博客代码。//(2)添加malloc()和free()函数的头文件//(3)exp()函数的头文件//(4)修改Gasussblur中形参intsigma为floatsigma,更加符合实际情况//(5)配置OpenCV//(6)调用函数#include"stdafx.h"#include //malloc(),free()函数需要的头文件#include#include //包含...
c语言实现pde算法,快速高斯模糊算法
源地址为:http://incubator.quasimondo.com/processing/gaussian_blur_1.php作者信息为:FastGaussianBlurv1.3byMarioKlingemannprocessing源码:http://incubator.quasimondo.com/processing/fastblur.pde转为C语言实现版本。代码如下://FastGaussianBlurv1.3//byMarioKlingemann//Cversionupdatedandperformanceoptimizationbytntmonks(http://tntmonks.cnblogs.com)//OneofmyfirststepswithProcessing.Iamafan//ofblurring.Especiallyasyoucanuseblurredimages//asabaseforothereffects.SothisissomethingI//mightgetbacktoinlaterexperiments.////Whatyouseeisan...
农历算法PHP源码
functionlunarcalendar($month,$year){global$lnlunarcalendar;//农历每月的天数。每个元素为一年。每个元素中的数据为:[0]是闰月在哪个月,0为无闰月;[1]到[13]是每年12或13个月的每月天数;[14]是当年的天干次序,[15]是当年的地支次序$everymonth=array(0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,...
php冒泡排序算法
functionff($arr){for($i=0;$i<count($arr);$i++){$isSort=false;for($j=0;$j<count($arr)-$i-1;$j++){if($arr[$j]<$arr[$j+1]){$isSort=true;$temp=$arr[$j];$arr[$j]=$arr[$j+1];$arr[$j+1]=$temp;}}if($isSort){break;}}return$arr;}$arr=array(3,1,2);var_dump(ff($arr));?> ...
python二叉树的后序遍历算法
#Definitionforabinarytreenode.classTreeNode:def__init__(self,x):self.val=xself.left=Noneself.right=None#后序遍历,先遍历左子树,在遍历右子树,在遍历根节点。fromtypingimportListclassSolution:defpostorderTraversal(self,root:TreeNode)->List[int]:#首先定义一个数组,用于接收遍历二叉树遍历的节点。self.num_list=[]self.dfs(root)returnself.num_listdefdfs(self,root):#首先判断当前节点是否为空ifnotroot:return#先去遍历左子树,self.dfs(root.left)#然后遍历右子树self.dfs(root.right)#最后把根节点添加进入self.num_list.append(root.val) ...
面向对象多继承(c3算法)、网络基础和编写网络相关的程序
一、面向对象多继承(c3算法)a、有多个父类先找左,再找右,如下示例:classA(object):passclassB(object):deff1(self):print('B')classC(A,B):passobj=C()obj.f1()print(C.__mro__)#打印出C类的继承顺序,结果如下一行:#(<class'__main__.C'>,<class'__main__.A'>,<class'__main__.B'>,<class'object'>)先找左,再找右b、经典类和新式类 python2(其实是python2.2以后): 经典类 新式类:如果自己或自己的前辈只要有人继承object,那么此类就是新式类。 python3: 新式类 经典类和新式类的查找成员的顺序不一样: ...
ES6,新增数据结构Map的用法
Javascript的Object本身就是键值对的数据结构,但实际上属性和值构成的是”字符串-值“对,属性只能是字符串,如果传个对象字面量作为属性名,那么会默认把对象转换成字符串,结果这个属性名就变成”[objectObject]“。ES6提供了”值-值“对的数据结构,键名不仅可以是字符串,也可以是对象。它是一个更完善的Hash结构。 特性1.键值对,键可以是对象。constmap1=newMap()constobjkey={p1:'v1'}map1.set(objkey,'hello')console.log(map1.get(objkey))结果:hello 2.Map可以接受数组作为参数,数组成员还是一个数组,其中有两个元素,一个表示键一个表示值。constmap2=newMap([['name','Aissen'],['age',12]])console.log(map2.get('name'))console.log(map2.get('age'))结果:Aissen12 操作1.size获取map的大小。constmap3=newMap();m...
ES6,新增数据结构WeakSet的用法
WeakSet和Set类似,同样是元素不重复的集合,它们的区别是WeakSet内的元素必须是对象,不能是其它类型。特性:1.元素必须是对象。添加一个number类型的元素。constws=newWeakSet()ws.add(1)结果是报类型错误。TypeError:Invalidvalueusedinweakset 添加一个对象。constws=newWeakSet()vara={p1:'1',p2:'2'}ws.add(a)console.log(ws.has(a));添加OK,结果显示:true可以通过WeakSet的has方法判断一个元素是否已在集合中。如果不需要存储元素时,可以使用delete方法删除元素。 2.弱引用,不被计入垃圾回收添加进WeakSet的元素对象,WeakSet不会对元素对像的引用计数加1,对于被添加进WeakSet的元素对象,只要该元素对象没有被除WeakSet以外的其他对象引用,就会被垃圾回收释放,在WeakSet中的该元素对象自动被释放,不会出现内存泄漏。因为这一特性,其性能要比map要高,对于存储无顺序要求的,不重复的,临时存储...
ES6,新增数据结构Set的用法
ES6提供了新的数据结构Set。 特性似于数组,但它的一大特性就是所有元素都是唯一的,没有重复。我们可以利用这一唯一特性进行数组的去重工作。单一数组的去重。letset6=newSet([1,2,2,3,4,3,5])console.log('distinct1:',set6)结果:distinct1:Set{1,2,3,4,5} 多数组的合并去重letarr1=[1,2,3,4]letarr2=[2,3,4,5,6]letset7=newSet([...arr1,...arr2])console.log('distinct2:',set7)结果:distinct2:Set{1,2,3,4,5,6} 操作1.向Set中添加元素。letset1=newSet()set1.add(1)set1.add(2)set1.add(3)console.log('added:',set1)结果:added:Set{1,2,3} 2.从Set中删除元素。letset1=newSet()set1.add(1)set1.add(2)set1.add(3)set1.d...
交换排序---快速排序算法(Javascript版)
快速排序是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最终达到整个数据变成有序序列。假设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为基准数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法是:1)设置两个变量low、high,排序开始的时候:low=0,high=N-1;2)以第一个数组元素作为基准数据,赋值给base,即base=A[0];3)从high开始向前搜索,即由后开始向前搜索(high--),找到第一个小于base的值A[high],将A[high]和A[low]互换;4)从low开始向后搜索,即由前开始向后搜索(low++),找到第一个大于base的A[low],将A[low]和A[high]互换;5)重复第3、4步,...
交换排序---冒泡排序算法(Javascript版)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 functionsort(elements){for(vari=0;i<elements.length-1;i++){for(varj=0;j<elements.length-i-1;j++){if(elements[j]>elements[j+1]){varswap=elements[j];elements[j]=elements[j+1];elements[j+1]=swap;}}}}varelements=[3,1,5,7,2,4,9,6,10,8];console.log('before:'+elements);sort(elements);console.log('after:'+elements); 效率:时间复杂度:最好:O(n),最坏:O(n^2),平均:O(n^2)。...
选择排序---堆排序算法(Javascript版)
堆排序分为两个过程:1.建堆。堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用小根堆。如果是大根堆,则通过调整函数将值最大的节点调整至堆根。2.将堆根保存于尾部,并对剩余序列调用调整函数,调整完成后,再将最大跟保存于尾部-1(-1,-2,...,-i),再对剩余序列进行调整,反复进行该过程,直至排序完成。 以下代码在nodejs中执行通过//调整函数functionheadAdjust(elements,pos,len){//将当前节点值进行保存varswap=elements[pos];//定位到当前节点的左边的子节点varchild=pos*2+1;//递归,直至没有子节点为止while(child<len){//如果当前节点有右边的子节点,并且右子节点较大的场合,采用右子节点//和当前节点进行比较if(child+1<len&&elements[child]<elements[child+1]){child+=1;}/...
选择排序---直接选择排序算法(Javascript版)
在要排序的一组数列中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。functionsort(elements){for(i=0;i<elements.length;i++){//将当前位置作为关键位置(最小位置)varkey=i;//找出剩余的数列中最小值的位置作为关键位置for(varj=i+1;j<elements.length;j++){if(elements[j]<elements[key]){key=j;}}//最小值的位置不是当前位置时,用最小值替换当前位置的值if(key!=i){varswap=elements[i];elements[i]=elements[key];elements[key]=swap;}}}varelements=[10,9,8,7,6,5,4,3,2,1,0];console.log('before:'+elements);sort(elements);console.log('af...