Mr.lun 发布的文章

[scode type="red"]有问题请在下方评论留言,看到我会一一回复。[/scode]
具体的HTML知识可以自行百度,在这里只给大家快速入门,短时间内搭建一个你的第一个个人网站。

先看代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>网页标题</title>
</head>
<body>
网页内容
</body>
</html>

新建一个文件,名为dome,文件类型html,将上述代码写入,保存,在浏览器打开。
dome.html

对比上述代码和运行结果,不难发现,<title>网页标题</title> 里面的文字就是网页名称。<body>网页内容</body>网页内容就是你的网页中的内容。

小小进阶-背景

我们虽然写出来了最基本的网页,但是只有文字,显得过于单调。我们可以为网页添加一个背景。
就像这个样子:
进阶-背景0
我们来看代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>网页标题</title>
<style type="text/css">
body {
    background: fixed;
    background-position: top;
    background-repeat: no-repeat;
    background-size: cover;
    background-image: url(https://cn.bing.com/th?id=OHR.SchlossGluecksburg_ZH-CN4079837227_UHD.jpg);
}
</style>
</head>
<body>
网页内容
</body>
</html>

此处使用CSS,具体知识自行百度,代码background-image: url(https://cn.bing.com/th?id=OHR.SchlossGluecksburg_ZH-CN4079837227_UHD.jpg);中有一个链接 https://cn.bing.com/th?id=OHR.SchlossGluecksburg_ZH-CN4079837227_UHD.jpg为图片链接,您可以切换成自己喜欢的链接。

把PM放到Linux虽然麻烦点,但是换来的是更好的性能,感觉很值。
这里我使用的是主频2.5Ghz的1核CPU,编译时长大概2小时。编译吃单核性能,有条件的话还是建议选择更高主频的服务器,而不是选择更多的核心。

PHP 7的编译 :https://github.com/KortanPRQ/php-build-scripts

解决libmvec.so.1: cannot open shared object file: no such file or directory的问题

wget http://ftp.gnu.org/gnu/glibc/glibc-2.25.tar.gz
tar xvzf glibc-2.25.tar.gz
cd glibc-2.25
mkdir build
cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make -i
make install -i

解决/usr/lib/libstdc++.so.6: version CXXABI_1.3.9′ not found/usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.21′ not found的问题
GCC版本太低,用strings /usr/lib64/libstdc++.so.6 | grep GLIBC查看GCC版本

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

下载并编译较新版本的GCC

wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-6.5.0/gcc-6.5.0.tar.gz
tar xvzf gcc-6.5.0.tar.gz
cd gcc-6.5.0
./contrib/download_prerequisites
mkdir build
cd build
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make
make install

主要语言是object-c,建议学完C以后再学OC,然后在学UI开发。

获取某个文本框的内容,文本框名称定义为txtnum0,获取的类型text。

NSString *num0 = self.txtnum0.text;

字符类型转换(OC)

int n0 = num0.intValue;

改变文本属性,使呈现结果,文本控件名labnum

self.labnum.text = [NSString stringWithFormat:@"%d",n3];
}

由于点击文本框时,调用了键盘,但是点击计算按钮以后键盘没有叫回,使用以下代码叫回键盘,假设调出文本框为txtnum0,则

[self.txtnum0 resignFirstResponder];

叫回键盘必须由第一响应者叫回,即谁叫出谁叫回。但如果有多个文本框控件的时候,我们不知道用户点的是那个,第一响应者是谁,上述方法失效。
那么用什么方法做到上述情况下的键盘叫回?我们都知道self.view表示当前控制器所管理的view,让当前控制器所管理的view停止编辑即可实现键盘叫回,这样的话,凡在这个view中的文本框控件都会被叫回,具体代码:

[self.view endEditing:YES];

偶尔闲着,写写文章

文件下载

[button color="info" icon="" url="https://zai.ink/usr/uploads/2022/04/1568826707.zip" type="round"]iOS档案馆应用支持.zip[/button]

文件解析

什么工具生成的我不知道,iOS开发我也不太懂,在这里简单的给大家解析一下这个文件。
上述文件下载,将zip解压,得到iOS档案馆应用支持.mobileconfig这个文件。右击,随便找个文本编辑器打开,在这里我用Sublime给大家简单的打开看一下。
图0
前面的一大串没什么用,我也看不懂,但到了<key>Icon</key>这组数值的时候,可以看到以Icon为键的数值是一个base64编码的值,通过键名很容易猜测到只是一张图片,在这一大串看不懂的代码前,加上data:image/png;base64, 在浏览器中打开,就可以看到这是一张经过base64编码的图片。同理,可以找一张自己的图片,编码以后放进去。
图1
继续往下走:图2
看这个键<key>Label</key> 应该是标签的解释。
<key>URL</key>顾名思义就是你要封装的url地址。
下面还有一些,自己慢慢捉摸吧,我也用不到。。。

在WEB开发过程中,存储密码常用的加密方法就是使用MD5不可逆加密,也就是说当用户将密码交给我们存储的时候,我们不需要看到他们的密码,只需要保存加密以后的密文即可。

问题

MD5不可逆,但只要有足够的算力+PB级的数据库,这个时候MD5加密就变得具有可破解性,这是很危险的,一但用户数据在存储、备份等操作过程或由于系统安全原因造成造成意外用户信息泄漏,不仅会降低企业信誉还可能要承担一定的法律责任。

解决

其实解决上述方法,在搜集的过程中我也见到了各种奇葩的操作,比如把服务器IP作为数据值掺杂在密文中。或者把明文加密成32字符十六进制数以后,将前十六位和后十六位拆分开,将他们分布加密成32字符十六进制数后再合并,接着重新走一遍MD5加密。此种方法以此类推,我们还可以在拆分以后分别加入一些用户的信息,也就是在字符串前/后每次加入自定义字符串,例如用户的UID/注册时间,然后将他们与密码加密后的值组合,再次进行MD5加密,这样得到的是一个少数规则的密文,没有足够的数据库来支撑破解。

总结

思路就是这个思路,总的来说想要安全存储用户数据,就要先写一个自己的加密协议,利用MD5不断的重复加密,在加密过程中使用我们的规则进行打乱,得到密文存入数据库。

如何得到用户密码?

得不到。

如何校验用户密码是否正确?

用户输入密码递交表单,将数据传递到服务器,经过我们的加密得到的数值等于数据库存放的数据,密码正确,否则错误。

原因

已知QQ互联APP IDAPP Key填写正确,回调地址无误。
本地测试一切正常,拿到用户那边测试的时候却出现报错,报错如下:

-1
client request's parameters are invalid, invalid openid

这种bug的出现是随机性的,且本地测试环境一切正常,多番查找原因无果,只能重写。
重写以后故障依旧,仔细阅读官方开发文档以后得到下面解决方法:

解决

在回调文件中我们要定义两次$qc= new qc(),第一次用于获取正确的access_token 和openid,而第二次用于保证正确传输access_token和openid以保证api的正常使用,否则报错client request's parameters are invalid, invalid openid
最简单的方法就是在第一次new QC()之后,立即获取access_token和openid,并立即重新使用获取到的access_token和openid来重新定义QC()类,以防止变量丢失或被覆盖。
核心回调代码示例:

$qc = new QC();
$acs = $qc->qq_callback();
$oid = $qc->get_openid();
$qc = new QC($acs,$oid);
$uinfo = $qc->get_user_info();

去年iOSIPA发起了开发者计划,每位开发者都可申请到WEB托管试用服务。在今年一月份,iOSIPA又开放了IPA文件全自动转换Plist API简直直呼WOC!
今天就来给大家讲一下这个API如何去调用,引用到自己的网站上面,实现实时生成实时调用,并且调用完毕即可销毁,彻底摆脱对Plist文件的依赖!

V2.0版本

新增支持下载中显示应用图标功能。
具体调用方式为:
https://api.ipa.cm/v2.php?iosipaurl=此处填写IPA下载链接&appname=此处填写APP名称&appico=此处填写APP图标

以下为使用教程:

参数

一个Plist文件最重要的参数莫过于 1.应用名称(其实这个也不算很重要) 2.应用IPA下载直链。有了这两者的参数就可以进行调用API
总结一下,重要参数两个,分别为:
1.应用名称
2.应用IPA下载直链

例子

假如应用名称为:QQ,应用IPA下载直链为https://zai.ink/QQ.ipa(务必使用HTTPS加密协议!)
先来看官方给出的调用例子:https://api.ipa.cm/?iosipaurl=此处填写IPA下载链接&appname=此处填写APP名称
那么此处的调用方式就是:https://api.ipa.cm/?iosipaurl=https://zai.ink/QQ.ipa&appname=QQ

谁在用?

iOSIPA软件网。ANTIA软件网。