好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

phprfc1738的简单介绍

很多站长朋友们都不太清楚phprfc1738,今天小编就来给大家整理phprfc1738,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 php http_build_query问题 2、 php自动跳转传值乱码 3、 php excel加密的实现方法有什么 4、 http_build_query的参数 5、 php 后台生成微信预支付订单 为什么查询不到 6、 "RFC1738"是什么 php http_build_query问题

http_build_query($a); // method=testtimes=2013-06-15+19%3A46%3A23

由于 参数之间会用 分隔,而恰好 times 是 × 的实体名称,所以显示出来就是 × 了。

如果你直接看页面源代码,是正确的,就是显示出来不一样。

php自动跳转传值乱码

传值正能是英文,传中文的话先把中文编码:urlencode();接到数据后再urldecode()转换成中文

string urldecode ( string str )

解码给出的已编码字符串中的任何 %##。返回解码后的字符串。 例子 1. urldecode() example

<?php

$a = explode('', $QUERY_STRING);

$i = 0;

while ($i < count($a)) {

$b = split('=', $a[$i]);

echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])),

' is ', htmlspecialchars(urldecode($b[1])), "<br />\n";

$i++;

}

?>

string urlencode ( string str )

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页: 例子 1. urlencode() 示例

<?php

echo '<a href="mycgi?foo=', urlencode($userinput), '">';

?>

php excel加密的实现方法有什么

PHP中的加密方式有如下几种

1. MD5加密

string md5 ( string $str [, bool $raw_output = false ] )

参数

str -- 原始字符串。

raw_output -- 如果可选的 raw_output 被设置为 TRUE,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回。

这是一种不可逆加密,执行如下的代码

$password = ‘123456‘;

echo md5($password);

得到结果是e10adc3949ba59abbe56e057f20f883e

2. Crype加密

string crypt ( string $str [, string $salt ] )

crypt() 返回一个基于标准 UNIX DES 算法或系统上其他可用的替代算法的散列字符串。

参数

str -- 待散列的字符串。

salt -- 可选的盐值字符串。如果没有提供,算法行为将由不同的算法实现决定,并可能导致不可预料的结束。

这是也一种不可逆加密,执行如下的代码

代码如下:

$password = ‘123456‘;

$salt = "test";// 只取前两个

echo crypt($password, $salt);

得到的结果是teMGKvBPcptKo

使用自动盐值的例子如下:

代码如下:

$password = crypt(‘mypassword‘); // 自动生成盐值

/* 你应当使用 crypt() 得到的完整结果作为盐值进行密码校验,以此来避免使用不同散列算法导致的问题。(如上所述,基于标准 DES 算法的密码散列使用 2 字符盐值,但是基于 MD5 算法的散列使用 12 个字符盐值。)*/

if (crypt(‘mypassword‘, $password) == $password) {

echo "Password verified!";

}

执行结果是输出 Password verified!

以不同散列类型使用 crypt()的例子如下:

代码如下:

if (CRYPT_STD_DES == 1) {

echo ‘Standard DES: ‘ . crypt(‘rasmuslerdorf‘, ‘rl‘) . "\n";

}

if (CRYPT_EXT_DES == 1) {

echo ‘Extended DES: ‘ . crypt(‘rasmuslerdorf‘, ‘_J9..rasm‘) . "\n";

}

if (CRYPT_MD5 == 1) {

echo ‘MD5: ‘ . crypt(‘rasmuslerdorf‘, ‘$1$rasmusle$‘) . "\n";

}

if (CRYPT_BLOWFISH == 1) {

echo ‘Blowfish: ‘ . crypt(‘rasmuslerdorf‘, ‘$2a$07$usesomesillystringforsalt$‘) . "\n";

}

if (CRYPT_SHA256 == 1) {

echo ‘SHA-256: ‘ . crypt(‘rasmuslerdorf‘, ‘$5$rounds=5000$usesomesillystringforsalt$‘) . "\n";

}

if (CRYPT_SHA512 == 1) {

echo ‘SHA-512: ‘ . crypt(‘rasmuslerdorf‘, ‘$6$rounds=5000$usesomesillystringforsalt$‘) . "\n";

}

其结果如下

Standard DES: rl.3StKT.4T8M

Extended DES: _J9..rasmBYk8r9AiWNc

MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0

Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi

SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6

SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

在 crypt() 函数支持多重散列的系统上,下面的常量根据相应的类型是否可用被设置为 0 或 1:

CRYPT_STD_DES - 基于标准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的两个字符作为盐值。在盐值中使用非法的字符将导致 crypt() 失败。

CRYPT_EXT_DES - 扩展的基于 DES 算法的散列。其盐值为 9 个字符的字符串,由 1 个下划线后面跟着 4 字节循环次数和 4 字节盐值组成。它们被编码成可打印字符,每个字符 6 位,有效位最少的优先。0 到 63 被编码为 "./0-9A-Za-z"。在盐值中使用非法的字符将导致 crypt() 失败。

CRYPT_MD5 - MD5 散列使用一个以 $1$ 开始的 12 字符的字符串盐值。

CRYPT_BLOWFISH - Blowfish 算法使用如下盐值:“$2a$”,一个两位 cost 参数,“$” 以及 64 位由 “./0-9A-Za-z” 中的字符组合而成的字符串。在盐值中使用此范围之外的字符将导致 crypt() 返回一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的范围是 04-31,超出这个范围将导致 crypt() 失败。

CRYPT_SHA256 - SHA-256 算法使用一个以 $5$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。

CRYPT_SHA512 - SHA-512 算法使用一个以 $6$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。

3. Sha1加密

string sha1 ( string $str [, bool $raw_output = false ] )

参数

str -- 输入字符串。

raw_output -- 如果可选的 raw_output 参数被设置为 TRUE,那么 sha1 摘要将以 20 字符长度的原始格式返回,否则返回值是一个 40 字符长度的十六进制数字。

这是也一种不可逆加密,执行如下代码:

$password = ‘123456‘;

echo sha1($password);

得到的结果是7c4a8d09ca3762af61e59520943dc26494f8941b

以上几种虽然是不可逆加密,但是也可以根据查字典的方式去解密。如下的地址中就提供了可以将上面的加密结果解密出来的功能。

那大家是不是加了就算加了密,也没用啊,其实不然,只要你的加密足够复杂,被破解出的可能性就越小,比如用以上三种加密方式混合加密,之后我会推荐给大家一个php的加密库。

4. URL加密

string urlencode ( string $str )

此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码不同。

string urldecode ( string $str )

解码给出的已编码字符串中的任何 %##。 加号(‘+‘)被解码成一个空格字符。

这是一种可逆加密,urlencode方法用于加密,urldecode方法用于解密,执行如下代码:

$url = ‘‘;

$encodeUrl = urlencode($url);

echo $encodeUrl . "\n";// 如果是在网页上展示的,就将\n修改为

echo urldecode($encodeUrl);

得到的结果如下

http%3A%2F%2F

基于RFC 3986的加密URL的方法如下:

代码如下:

function myUrlEncode($string) {

$entities = array(‘%21‘, ‘%2A‘, ‘%27‘, ‘%28‘, ‘%29‘, ‘%3B‘, ‘%3A‘, ‘%40‘, ‘%26‘, ‘%3D‘, ‘%2B‘, ‘%24‘, ‘%2C‘, ‘%2F‘, ‘%3F‘, ‘%25‘, ‘%23‘, ‘%5B‘, ‘%5D‘);

$replacements = array(‘!‘, ‘*‘, "‘", "(", ")", ";", ":", "@", "", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");

return str_replace($entities, $replacements, urlencode($string));

}

5. Base64信息编码加密

string base64_encode ( string $data )

使用 base64 对 data 进行编码。

设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。

Base64-encoded 数据要比原始数据多占用 33% 左右的空间。

string base64_decode ( string $data [, bool $strict = false ] )

对 base64 编码的 data 进行解码。

参数

data -- 编码过的数据。

strict -- 如果输入的数据超出了 base64 字母表,则返回 FALSE。

执行如下代码:

代码如下:

$name = ‘CraryPrimitiveMan‘;

$encodeName = base64_encode($name);

echo $encodeName . "\n";

echo base64_decode($encodeName);

其结果如下

代码如下:

Q3JhcnlQcmltaXRpdmVNYW4=

CraryPrimitiveMan

推荐phpass

经 phpass 0.3 测试,在存入数据库之前进行哈希保护用户密码的标准方式。 许多常用的哈希算法如 md5,甚至是 sha1 对于密码存储都是不安全的, 因为骇客能够使用那些算法轻而易举地破解密码。

对密码进行哈希最安全的方法是使用 bcrypt 算法。开源的 phpass 库以一个易于使用的类来提供该功能。

代码如下:

<?php

// Include phpass 库

require_once(‘phpass-03/PasswordHash.php‘)

// 初始化散列器为不可移植(这样更安全)

$hasher = new PasswordHash(8, false);

// 计算密码的哈希值。$hashedPassword 是一个长度为 60 个字符的字符串.

$hashedPassword = $hasher->HashPassword(‘my super cool password‘);

// 你现在可以安全地将 $hashedPassword 保存到数据库中!

// 通过比较用户输入内容(产生的哈希值)和我们之前计算出的哈希值,来判断用户是否输入了正确的密码

$hasher->CheckPassword(‘the wrong password‘, $hashedPassword); // false

$hasher->CheckPassword(‘my super cool password‘, $hashedPassword); // true

?>

http_build_query的参数

query_data

可以是数组或包含属性的对象。

一个 query_data 数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。

如果 query_data 是一个对象,只有 public 的属性会加入结果。

numeric_prefix

如果在基础数组中使用了数字下标同时给出了该参数,此参数值将会作为基础数组中的数字下标元素的前缀。

这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名。

arg_separator

除非指定并使用了这个参数,否则会用 arg_separator.output 来分隔参数。

enc_type

默认使用 PHP_QUERY_RFC1738。

如果 enc_type 是 PHP_QUERY_RFC1738,则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码,空格会被编码成加号(+)。

如果 enc_type 是 PHP_QUERY_RFC3986,将根据 » RFC 3986 编码,空格会被百分号编码(%20)。

php 后台生成微信预支付订单 为什么查询不到

<?php

namespace common\services\WechatPay;

class WechatAppPay extends WechatPayBase

{

//package参数

public $package = [];

//异步通知参数

public $notify = [];

//推送预支付订单参数

protected $config = [];

//存储access token和获取时间的文件

protected $file;

//access token

protected $accessToken;

//取access token的url

const ACCESS_TOKEN_URL = ';appid=%ssecret=%s';

//生成预支付订单提交地址

const POST_ORDER_URL = '';

public function __construct()

{

$this->file = __DIR__ . '/payAccessToken.txt';

}

/**

* 创建APP支付最终返回参数

* @throws \Exception

* @return multitype:string NULL

*/

public function createAppPayData()

{

$this->generateConfig();

$prepayid = $this->getPrepayid();

try{

$array = [

'appid' => $this->appid,

'appkey' => $this->paySignkey,

'noncestr' => $this->getRandomStr(),

'package' => 'Sign=WXPay',

'partnerid' => $this->partnerId,

'prepayid' => $prepayid,

'timestamp' => (string)time(),

];

$array['sign'] = $this->sha1Sign($array);

unset($array['appkey']);

} catch(\Exception $e) {

throw new \Exception($e->getMessage());

}

return $array;

}

/**

* 验证支付成功后的通知参数

*

* @throws \Exception

* @return boolean

*/

public function verifyNotify()

{

try{

$staySignStr = $this->notify;

unset($staySignStr['sign']);

$sign = $this->signData($staySignStr);

return $this->notify['sign'] === $sign;

} catch(\Exception $e) {

throw new \Exception($e->getMessage());

}

}

/**

* 魔术方法,给添加支付参数进来

*

* @param string $name 参数名

* @param string $value 参数值

*/

public function __set($name, $value)

{

$this->$name = $value;

}

/**

* 设置access token

* @param string $token

* @throws \Exception

* @return boolean

*/

public function setAccessToken()

{

try{

if(!file_exists($this->file) || !is_file($this->file)) {

$f = fopen($this->file, 'a');

fclose($f);

}

$content = file_get_contents($this->file);

if(!empty($content)) {

$info = json_decode($content, true);

if( time() - $info['getTime'] < 7150 ) {

$this->accessToken = $info['accessToken'];

return true;

}

}

//文件内容为空或access token已失效,重新获取

$this->outputAccessTokenToFile();

} catch(\Exception $e) {

throw new \Exception($e->getMessage());

}

return true;

}

/**

* 写入access token 到文件

* @throws \Exception

* @return boolean

*/

protected function outputAccessTokenToFile()

{

try{

$f = fopen($this->file, 'wb');

$token = [

'accessToken' => $this->getAccessToken(),

'getTime' => time(),

];

flock($f, LOCK_EX);

fwrite($f, json_encode($token));

flock($f, LOCK_UN);

fclose($f);

$this->accessToken = $token['accessToken'];

} catch(\Exception $e) {

throw new \Exception($e->getMessage());

}

return true;

}

/**

* 取access token

*

* @throws \Exception

* @return string

*/

protected function getAccessToken()

{

$url = sprintf(self::ACCESS_TOKEN_URL, $this->appid, $this->appSecret);

$result = json_decode( $this->getUrl($url), true );

if(isset($result['errcode'])) {

throw new \Exception("get access token failed:{$result['errmsg']}");

}

return $result['access_token'];

}

/**

* 取预支付会话标识

*

* @throws \Exception

* @return string

*/

protected function getPrepayid()

{

$data = json_encode($this->config);

$url = sprintf(self::POST_ORDER_URL, $this->accessToken);

$result = json_decode( $this->postUrl($url, $data), true );

if( isset($result['errcode']) $result['errcode'] != 0 ) {

throw new \Exception($result['errmsg']);

}

if( !isset($result['prepayid']) ) {

throw new \Exception('get prepayid failed, url request error.');

}

return $result['prepayid'];

}

/**

* 组装预支付参数

*

* @throws \Exception

*/

protected function generateConfig()

{

try{

$this->config = [

'appid' => $this->appid,

'traceid' => $this->traceid,

'noncestr' => $this->getRandomStr(),

'timestamp' => time(),

'package' => $this->generatePackage(),

'sign_method' => $this->sign_method,

];

$this->config['app_signature'] = $this->generateSign();

} catch(\Exception $e) {

throw new \Exception($e->getMessage());

}

}

/**

* 生成package字段

*

* 生成规则:

* 1、生成sign的值signValue

* 2、对package参数再次拼接成查询字符串,值需要进行urlencode

* 3、将sign=signValue拼接到2生成的字符串后面得到最终的package字符串

*

* 第2步urlencode空格需要编码成%20而不是+

*

* RFC 1738会把 空格编码成+

* RFC 3986会把空格编码成%20

*

* @return string

*/

protected function generatePackage()

{

$this->package['sign'] = $this->signData($this->package);

return http_build_query($this->package, '', '', PHP_QUERY_RFC3986);

}

/**

* 生成签名

*

* @return string

*/

protected function generateSign()

{

$signArray = [

'appid' => $this->appid,

'appkey' => $this->paySignkey,

'noncestr' => $this->config['noncestr'],

'package' => $this->config['package'],

'timestamp' => $this->config['timestamp'],

'traceid' => $this->traceid,

];

return $this->sha1Sign($signArray);

}

/**

* 签名数据

*

* 生成规则:

* 1、字典排序,拼接成查询字符串格式,不需要urlencode

* 2、上一步得到的字符串最后拼接上key=paternerKey

* 3、MD5哈希字符串并转换成大写得到sign的值signValue

*

* @param array $data 待签名数据

* @return string 最终签名结果

*/

protected function signData($data)

{

ksort($data);

$str = $this->arrayToString($data);

$str .= "key={$this->partnerKey}";

return strtoupper( $this->signMd5($str) );

}

/**

* sha1签名

* 签名规则

* 1、字典排序

* 2、拼接查询字符串

* 3、sha1运算

*

* @param array $arr

* @return string

*/

protected function sha1Sign($arr)

{

ksort($arr);

return sha1( $this->arrayToString($arr) );

}

}

"RFC1738"是什么

RFC1738描述的是统一资源定位器(URL)

RFC由一系列草案组成,起始于1969年(第一个RFC文档发布于1969年4月7日,参见“RFC30年”,RFC2555”),RFC文档是一系列关于Internet(早期为ARPANET)的技术资料汇编。这些文档详细讨论了计算机网络的方方面面,重点在网络协议,进程,程序,概念以及一些会议纪要,意见,各种观点等。

关于phprfc1738的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于phprfc1738的简单介绍的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did197706
更新时间:2023-04-26   阅读:27次

上一篇: php数组取中间几个 php中如何获取数组的长度

下一篇:phpcurl查错 php check

最新资料更新

  • 1.铜仁php招聘信息 铜仁工作招聘信息
  • 2.php单个会话内存 php会话保存数据的两种方式是
  • 3.文章加载更多php php加载html
  • 4.php前端页面源码 php前端页面源码是多少
  • 5.phpdelete的简单介绍
  • 6.php页面加ico php嵌入网页
  • 7.php构造方法重写 php 构造方法
  • 8.php操作redis存值 php redis数据类型
  • 9.php做vip解析 php解析器是什么
  • 10.php网站后台demo php后端模板
  • 11.关于php2esgbi的信息
  • 12.php在线做点兼职 php在线做点兼职是真的吗
  • 13.php获取阴历 php获取日期
  • 14.php图书管理系统 php图书管理系统全部代码
  • 15.vscode开发php vscode开发JAVA方便吗
  • 16.无法使用curlphp 无法使用此地区的账号登陆
  • 17.ubuntuphp启动 ubuntu开机启动python
  • 18.php蓝色的代码 html颜色代码
  • 19.php视频直播源码 php直播源码免费
  • 20.php怎么使用css php怎么使用数据库锁

CopyRight:2016-{hedonghua:year}{hedonghua:sitegs} 备案ICP:湘ICP备09009000号-16 {hedonghua:sitejym}
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]