<?php
function encode_file_contents($filename) {
$type=strtolower(substr(strrchr($filename,'.'),1));
if ('php' == $type && is_file($filename) && is_writable($filename)) { // 如果是PHP文件 并且可写 则进行压缩编码
$contents = file_get_contents($filename); // 判断文件是否已经被编码处理
$contents = php_strip_whitespace($filename);
// 去除PHP头部和尾部标识
$headerPos = strpos($contents,'<?php');
$footerPos = strrpos($contents,'?>');
$contents = substr($contents, $headerPos + 5, $footerPos - $headerPos);
$encode = base64_encode(gzdeflate($contents)); // 开始编码
$encode = '<?php'."\n eval(gzinflate(base64_decode("."'".$encode."'".")));\n\n?>";
return file_put_contents($filename, $encode);
}
return false;
}
//调用函数
$filename = 'dam.php';
encode_file_contents($filename);
echo "OK,加密完成!"
?>
<?php
function RandAbc($length = "") { // 返回随机字符串
$str = "";
return str_shuffle($str);
}
$filename = 'index.php'; //要加密的文件
$T_k1 = RandAbc(); //随机密匙1
$T_k2 = RandAbc(); //随机密匙2
$vstr = file_get_contents($filename);
$v1 = base64_encode($vstr);
$c = strtr($v1, $T_k1, $T_k2); //根据密匙替换对应字符。
$c = $T_k1.$T_k2.$c;
$q1 = "O00O0O";
$q2 = "O0O000";
$q3 = "O0OO00";
$q4 = "OO0O00";
$q5 = "OO0000";
$q6 = "O00OO0";
$s = '$'.$q6.'=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$'.$q1.'=$'.$q6.'{3}.$'.$q6.'{6}.$'.$q6.'{33}.$'.$q6.'{30};$'.$q3.'=$'.$q6.'{33}.$'.$q6.'{10}.$'.$q6.'{24}.$'.$q6.'{10}.$'.$q6.'{24};$'.$q4.'=$'.$q3.'{0}.$'.$q6.'{18}.$'.$q6.'{3}.$'.$q3.'{0}.$'.$q3.'{1}.$'.$q6.'{24};$'.$q5.'=$'.$q6.'{7}.$'.$q6.'{13};$'.$q1.'.=$'.$q6.'{22}.$'.$q6.'{36}.$'.$q6.'{29}.$'.$q6.'{26}.$'.$q6.'{30}.$'.$q6.'{32}.$'.$q6.'{35}.$'.$q6.'{26}.$'.$q6.'{30};eval($'.$q1.'("'.base64_encode('$'.$q2.'="'.$c.'";eval(\'?>\'.$'.$q1.'($'.$q3.'($'.$q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'
‘贰’ 求C代码:我要给一段文本简单的加密,将某字符替换为某字符
我没空给你写
大概给你点思路吧
这个用ascii码
把原来的ascii码自动+5或者+6,然后保存
然后你做一个反向程序就行了
‘叁’ 凯撒密码为一种替换密码,此题的加密过程为先进行base64编码,再进行移
在密码学中,恺撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
恺撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为: E(x) = (x + n) mod 26.
解密就是:
D(x) = (x - n) mod 26.
显而易见,一旦确定了某两个字母的对应关系(即n的值),这种移位密码很容易被破解。
因此,为了使密码有更高的安全性,单字母替换密码就出现了。
明码表:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密码表:T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
但是这种加密方式依然可以破解,根据字母使用频度表,分析密文中的字母频率,将其对照即可破解。
不仅如此,凯撒加密对加密数据也是有要求的,一般情况下,它只支持对基本的英文字母进行加密,如果对中文等亚太地区的文字进行加密,结果可想而知,你的隐私将毫无保留的出现在众人面前。有人说,我们可以扩展这个算法,使它支持所有的文字,这么做是可行的,如果采用同余式的方式实现,代码几乎不怎么需要改动,只要字符集本身是Unicode就可以了。但是这种加密的安全性很难满足应用的要求。如果采用单字母替换的方式,程序将需要构建两个巨大的字符数组去保存他们的映射关系,而且扩展性也不好,当然也是不可行的。这样看来,凯撒加密岂不是一无是处了,其实对于一般的应用,凯撒加密还是足以应付的,只要我们对它稍作改进。
‘肆’ HTML5代码如何加密呢
html是不可以加密的!因为浏览器不支持加密!
网上有许多所谓加密其实就是把网页通过Unicode码的转换实现的,这些加密都是可以通过简单的Unicode码的转换景象解密,并没有什么卵用。而且这些加密手段只有在右键查看源代码的时候才会看到加密信息,如果是浏览器F12调试页面的话,会直接显示解密后的页面。
并且中文文字太多会导致将你的加密过后页面代码膨胀。英文反会有压缩效果。
如果是有一些敏感信息确实需要加密的话,可以使用js进行MD5加密进行传输。但是整个页面进行加密确实是没有必要的。
‘伍’ HTML5 代码如何加密呢
html是不可以加密的!因为浏览器不支持加密!
网上有许多所谓加密其实就是把网页通过Unicode码的转换实现的,这些加密都是可以通过简单的Unicode码的转换景象解密,并没有什么卵用。而且这些加密手段只有在右键查看源代码的时候才会看到加密信息,如果是浏览器F12调试页面的话,会直接显示解密后的页面。
并且中文文字太多会导致将你的加密过后页面代码膨胀。英文反会有压缩效果。
如果是有一些敏感信息确实需要加密的话,可以使用js进行MD5加密进行传输。但是整个页面进行加密确实是没有必要的。
‘陆’ 编写程序将4个字符构成的字符串用替换加密法编码为密文
package Game;
import java.util.Scanner;
public class Game11 {
public static void main(String[] args) {
String str="abAZ";
String str1="";
char arr[]=new char[58];
for(int i=0;i<26;i++){
arr[i]=(char)((int)('a')+i); //把小写的 a-z放入数组中 角标为 0-25;
arr[i+29]=(char)((int)('A')+i);//把大写的A -Z放入数组中 角标为 29-54;
}
for(int i=0;i<3;i++){
arr[i+26]=(char)((int)('a')+i); // 将26-28号元素赋值为 a-c;
arr[i+55]=(char)((int)('A')+i); // 将55-57号元素赋值为 A-C;
}
for(int i=0;i<str.length();i++){
for(int j=0;j<58;j++){
if(arr[j]==str.charAt(i)){ //找出字符串中每个字符在数组中第一次出现的位置;
str1=str1+arr[j+3]; //加密。
break;
}
}
}
System.out.println(str1);
}
}
‘柒’ 请问这种JS代码怎么加密
这不算加密,只不过一眼看不出来罢了。其实就是JavaScript字符串转义。
原理很简单,比如字符 ’w‘
它的 charCode 是 119 十六进制表示为 0x77
然后利用 JavaScript 字符串转义前缀 x,表达出编码过的 ASCII 字符来:
x+charCode的十六进制表示(两位)
所以字符串 'x77' 就是字符串 'w'
也就是说
'x77'==='w'
这个的返回值是 true,二者完全等效!
这是对于 ascii 代码表示形式,charCode 大于 255 的怎么处理?就要用到 u 前缀了
u+charCode的十六进制表示(
比如汉字 '学' 的 charCode 是23398 (0x5b66)
书写时只要把 0x 替换为 u:
u5b66
这样就可以了。
'u5b66'==='学'
那么为什么要这么麻烦呢?直接输入字符不就好了吗?要知道,有些字符是不能打印或不能被输入的(比如功能/控制字符“退格”等),如果要在字符串中包含这些字符,只能依靠字符串转义了!
回头看楼主给的代码:
"x64x6fx63x75x6dx65x6ex74"
这个是什么?
F12开浏览器开发者工具,切到控制台(或者你有 node.js),在控制台输入这一串。
你看到输出什么了吗?
"document"
继续
"x77x72x69x74x65x6cx6e"
这个输入后,控制台返回
"writeln"
剩下括号内的也是一样的啦。结果是一个指向特定地址的 <a> 标签。
所以翻译过来就是
window['document']['writeln']('<ahref="...">标签</a>')
看懂了?
好,既然楼主说要怎么加密的。我就写了个 JS 脚本,只要调用这个方法,你就得到“加密”后的字符串信息了:
functionencrypt(str){
varresult='',charCode
for(vari=0,length=str.length;i<length;i++){
charCode=str.charCodeAt(i)
if(charCode<0x10){
result+='\x0'+charCode.toString(16)
}elseif(charCode<0x100){
result+='\x'+charCode.toString(16)
}elseif(charCode<0x1000){
result+='\u0'+charCode.toString(16)
}else{
result+='\u'+charCode.toString(16)
}
}
returnresult
}
在控制台执行
encrpty('楼主给的那一串')
返回
""
楼主只要把括号中的那一串替换为上面输入的内容就好了。
‘捌’ iOS代码加密的几种方式
众所周知的是大部分iOS代码一般不会做加密加固,因为iOS
APP一般是通过AppStore发布的,而且苹果的系统难以攻破,所以在iOS里做代码加固一般是一件出力不讨好的事情。万事皆有例外,不管iOS、adr还是js,加密的目的是为了代码的安全性,虽然现在开源畅行,但是不管个人开发者还是大厂皆有保护代码安全的需求,所以iOS代码加固有了生存的土壤。下面简单介绍下iOS代码加密的几种方式。
iOS代码加密的几种方式
1.字符串加密
字符串会暴露APP的很多关键信息,攻击者可以根据从界面获取的字符串,快速找到相关逻辑的处理函数,从而进行分析破解。加密字符串可以增加攻击者阅读代码的难度以及根据字符串静态搜索的难度。
一般的处理方式是对需要加密的字符串加密,并保存加密后的数据,再在使用字符串的地方插入解密算法。简单的加密算法可以把NSString转为byte或者NSData的方式,还可以把字符串放到后端来返回,尽量少的暴露页面信息。下面举个简单例子,把NSString转为16进制的字符串:
2.符号混淆
符号混淆的中心思想是将类名、方法名、变量名替换为无意义符号,提高应用安全性;防止敏感符号被class-mp工具提取,防止IDA Pro等工具反编译后分析业务代码。目前市面上的IOS应用基本上是没有使用类名方法名混淆的。
别名
在编写代码的时候直接用别名可能是最简单的一种方式,也是比较管用的一种方式。因为你的app被破解后,假如很容易就能从你的类名中寻找到蛛丝马迹,那离hook只是一步之遥,之前微信抢红包的插件应该就是用hook的方式执行的。
b.C重写
编写别名的方式不是很易读,而且也不利于后续维护,这时你可能需要升级一下你的保护方式,用C来重写你的代码吧。这样把函数名隐藏在结构体中,用函数指针成员的形式存储,编译后,只留下了地址,去掉了名字和参数表,让他们无从下手( from 念茜)。如下例子:
c.脚本处理
稍微高级一点的是脚本扫描处理替换代码,因为要用到linux命令来编写脚本,可能会有一点门槛,不过学了之后你就可以出去吹嘘你全栈工程师的名头啦。。。
linux脚本比较常用的几个命令如下:
脚本混淆替换是用上述几个命令扫描出来需要替换的字符串,比如方法名,类名,变量名,并做替换,如果你能熟练应用上述几个命令,恭喜你,已经了解了脚本的一点皮毛了。
如以下脚本搜索遍历了代码目录下的需要混淆的关键字:
替换的方式可以直接扫描文件并对文件中的所有内容替换,也可以采用define的方式定义别名。例如:
d.开源项目ios-class-guard
该项目是基于class-mp的扩展,和脚本处理类似,是用class-mp扫描出编译后的类名、方法名、属性名等并做替换,只是不支持隐式C方法的替换,有兴趣的同学可以使用下。
3.代码逻辑混淆
代码逻辑混淆有以下几个方面的含义:
对方法体进行混淆,保证源码被逆向后该部分的代码有很大的迷惑性,因为有一些垃圾代码的存在;
对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低,这很容易把破解者带到沟里去;
它拥有和原始的代码一样的功能,这是最最关键的。
一般使用obfuscator-llvm来做代码逻辑混淆,或许会对该开源工具做个简单介绍。
4.加固SDK
adr中一般比较常见的加固等操作,iOS也有一些第三方提供这样的服务,但是没有真正使用过,不知道效果如何。
当然还有一些第三方服务的加固产品,基本上都是采用了以上一种或几种混淆方式做的封装,如果想要直接可以拿来使用的服务,可以采用下,常用的一些服务如下:
几维安全
iOS加密可能市场很小,但是存在必有道理,在越狱/开源/极客的眼中,你的APP并没有你想象的那么安全,如果希望你的代码更加安全,就应给iOS代码加密。
‘玖’ 字符替换加密功能
简单讲就是对一篇文章中的字母进行调换,比如字母A的换成字母C,以此类推替换之后别人就认不出来了,而根据事先制定好的对应规则转换一下就又变回原来的文章了。当然这是最简单替换加密,而正常的加密应该是在编码层面上的。我们知道在计算机中的数据都是由0、1组成的信号序列,我们平时使用的字符其实在不同的编码规则下也都对应着相应的0、1字符串。比如在A规则下字母D对应着000111,而在B规则下字母D就可能是001100。总之,无论采用怎样的编码规则一篇文章在计算机中无非就是这些0、1字符串的组合,我们只要按照相应的规则译码就可以了。而加密就是把这些0、1序列按照一定的规则打乱顺序,这样一来如果直接译码肯定就得不到原有的内容了,只有按照一定的规则把序列先变回原来的顺序(解密)才能进行译码。而这一定的规则就是你所输入的密码,再举一个例子,如果你输入的密码是ABC,对应的二进制串是六位的110010,在加密时就可以采用对位变换的办法,即每六位对应一下,如果同一位 的数字相同就用1表示、不同就用0表示,例如110010(密码串)000010(原始数据)001111(加密数据)这样一来加密的内容其实反映的就是原始数据和密码间的相同程度,这种方法译码是很简单的,只要对位比较一下就可以了。字符替换大致就是这么个思路,至于在具体的加密过程中不同的软件可能有自己独立的算法。
‘拾’ C语言设计一个用简单的加密程序,即用字母替换的方式加密,程序运行中发现问题,求解释。
原因就是char是1个字节的,你不能超过127(hi,楼上的,不是128哦,是-128~127不要误人子弟),你到后面的vwxyz已经溢出,所以是乱码。
我的解决方法就很简单,就是换成unsigned char 数组,这样取值范围增大到(0~255)就可以了,既简单又不破坏原有的结构
还有
else if(str[i]<'a')
{
str[i]+=26;
}
这句话是废话,可以删掉
我修改过的版本
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void EncodeString(unsigned char *str,int key)
{
int length,i;//length为传入字符串长度,i用作循环计数器
length=strlen(str);
for(i=0;i<length;i++)//对字符串中的每个字符依次进行加密
{
if(isupper(str[i]))//对大写字母加密
{
str[i]+=key%26;
if(str[i]>'Z')
{
str[i]-=26;
}
}
else if(islower(str[i]))//对小写字母加密
{
str[i]+=key%26;
if(str[i]>'z')
{
str[i]-=26;
}
}
}
}
void main()
{
unsigned char arr[50],buffer;//arr[50]用来接收字符串信息,buffer用来接收缓冲区中的回车
int key;//key为加密秘钥
printf("This program encodes messages using a cyclic cipher.\n");
printf("To stop, enter 0 as the key.\n");
while(1)//程序一直运行,直到输入密钥0为止
{
printf("Enter the key: ");
scanf("%d",&key);
scanf("%c",&buffer);
if(0==key)
{
break;//输入密钥为0,则退出程序
}
printf("Enter a message: ");
scanf("%s",arr);
scanf("%c",&buffer);
EncodeString(arr,key);
printf("Encoded message: %s\n",arr);
}
}