Hash HMAC 签名在 PHP、Python、Node.js 和 Java 中的使用
Hash HMAC 签名在 PHP、Python、Node.js 和 Java 中的使用简介Hash HMAC(Hash-based Message Authentication Code)是一种基于哈希函数和密钥的消息认证码算法,用于验证消息的完整性和真实性。在本篇博客中,我们将介绍如何在 PHP、Python、Node.js 和 Java 中生成和验证 Hash HMAC 签名。 什么是 Hash HMAC 签名?HMAC 是一种基于哈希函数和密钥的消息认证码算法。它通过将消息与密钥进行哈希运算来生成一个固定长度的哈希值,用于验证消息的完整性和真实性。HMAC 使用一个密钥来对消息进行加密,并将加密后的结果与消息一起进行哈希运算。 在 PHP 中生成和验证 HMAC 签名在 PHP 中,可以使用 hash_hmac 函数生成和验证 HMAC 签名。下面是一个生成和验证 HMAC 签名的 PHP 示例代码: <?php$data = 'Hello, World!';$key = 'YourSecretKey';// 生成 HMA...
PHP rawurlencode 与 urlencode 的差异
PHP url Encode PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。 1. PHP 的 urlencode() 官方說明返回字元串,此字元串中除了 -_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進制數,空格則編碼為加號(+)。此編碼與 WWW 表單 POST 數據的編碼方式是一樣的,同時與 application/x-www-form-urlencoded 的媒體類型編碼方式一樣。由於歷史原因,此編碼在將空格編碼為加號(+)方面與 » RFC3986 編碼(參見 rawurlencode())不同。 2. PHP 的 rawurlencode() 官方說明返回字元串,此字元串中除了 -_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進制數。這是在 » RFC 3986 中描述的編...
Mysql Lock wait timeout 锁等待坑
问题复盘 : 客户端服务A -> 中转服务B -> 终端服务C. 服务A 请求 服务B (超时 6秒) 没有拿到回包数据 , 连续请求8次 耗时48秒 服务B 请求 服务C (无超时) nginx 日志查出 有8条请求超时 分别为 50秒 43秒 37秒 … 服务C 存在Mysql 锁等待, 原因在于 http服务 和 cli脚本服务 同时操作同一条数据 锁等待默认50秒超时. 一. 发生问题 锁等待时间太久 导致重复请求解 : 锁等待问题 缩短调整锁等待超时时间30秒, 调大超时请求时间至15秒 二. 锁等待超时后 拿数据方法返回null 导致脏读问题解 : 判断返回值null 抛出异常防止脏读问题
PHP 中使用 hash_hmac 加密
PHP 中使用 hash_hmac 加密在PHP开发中,数据的安全性和加密是非常重要的方面。hash_hmac函数是PHP提供的一种用于生成HMAC(Hash-based Message Authentication Code)的加密算法。本文将介绍如何在PHP中使用hash_hmac函数进行加密操作。 hash_hmac 函数hash_hmac函数是PHP中用于生成HMAC的函数,其基本语法如下: hash_hmac(string $algorithm, string $data, string $key, bool $raw_output = false): string|false 该函数接受四个参数: $algorithm:指定要使用的哈希算法,如MD5、SHA-256等。 $data:要进行加密的数据。 $key:加密使用的密钥。 $raw_output(可选):指定输出是否为原始二进制数据,默认为false,表示输出为小写十六进制字符串。 函数返回一个加密后的字符串,或者在出错时返回false。 加密示例下面是一个使用hash_hmac函数进行加密的示例: ...
Mysql 字段权限 禁止修改数据表的某一字段
通过mysql 管理账号 设置表单个字段权限, 限制表记录被修改的问题. 针对test账号 db1库下面的t1表的 id,name, age 字段授予select, insert权限; 授权格式 select(要授权的字段,要授权的字段) 用户括号 括起来、insert() mysql> grant select(id,name,age),insert(id,name,age) on db1.t1 to 'test'@'localhost';Query OK, 0 rows affected (0.11 sec) 授权记录查询 select * from mysql.columns_priv; 该表也是不要拥有delete 权限 , 小心被绕开. 对比上篇文章 Mysql 触发器 禁止修改数据表的某一字段 的方案要简单一些. 诶没有DBA 啥都要自己想
Mysql 触发器 禁止修改数据表的某一字段
MySQL 触发器:禁止修改数据表的某一字段MySQL 触发器是一种在数据库中定义的特殊存储过程,它可以在指定的事件(如插入、更新或删除数据)发生时自动执行。在本篇博客中,我们将介绍如何使用 MySQL 触发器来禁止修改数据表的某一字段。 1. 创建触发器首先,我们需要创建一个触发器,以便在更新操作发生时执行相应的逻辑。以下是创建触发器的语法: DELIMITER $$CREATE TRIGGER trigger_nameBEFORE UPDATE ON table_nameFOR EACH ROWBEGIN -- 触发器逻辑 IF NEW.field_name <> OLD.field_name THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '禁止修改字段 field_name!'; END IF;END$$DELIMITER ; 在上述语法中: trigger_name 是触发器的名称,可以根据需要自行命名。 table_...
在MySQL中阻止UPDATE, DELETE 语句的执行,在没有添加WHERE条件
如果在生产环境中使用UPDATE,DELETE语句操作数据,此时如果忘记携带本应该添加的WHERE条件,后果可能不堪设想。在正常的业务情况,也不会更新或者删除所有的记录 1. 阻止update设置(sql_safe_updates)sql_safe_updates这个MySQL自带的参数就可以完美的解决我们的问题,并且该参数是可以在线变更的哦~当该参数开启的情况下,你必须要在UPDATE语句后携带WHERE条件,否则就会报出ERROR。。 sql_safe_updates=0,即未开启 $ set sql_safe_updates=0;Query OK, 0 rows affected (0.00 sec) $ show variables like 'sql_safe_updates'Variable_name Valuesql_safe_updates OFF 如上属的例子所示,当参数sql_safe_updates开启的时候,UPDATE语句不携带WHERE条件将会爆出一个错误。 2. 阻止delete设置直接限制m...
[收藏] 别人公司DB 的 MYSQL数据库开发规范文档
规范 - mysql开发规范MySQL安全账号分类 管理员帐户(DBA专用) 运维类帐户(复制,监控,备份等) 程序用账户(根据业务命名,权限最小化原则.命名规则: 业务_rw, 业务_r) 只读用账户(根据内外网决定是否启用SSL) 开发权限程序帐户权限: *_rw账号权限: SELECT,INSERT,UPDATE,DELETE,SHOW VIEW*_r账号权限: SELECT,SHOW VIEW,EXECUTE(不改写数据) 其它安全规范 禁止使用程序帐号通过客户端访问数据库,使用OPS系统 连接串中密码必须加密 生产环境限定帐户的Host为内网段IP。例: au_business_r@’10.10.7.%’ 权限默认给5+2(可选)种: insert,delete,update,select,show view; execute,mysql.proc select权限 DB服务器禁用外网IP。如果需要外网访问使用ip+port转发方式并使用SSL加密数据 禁用链接服务器(FEDERATED引擎) 禁止drop表,可以rename table到backupdb数据库...
[踩坑] Nginx 配置 WebScoket 未配置 proxy_http_version 导致长连接变短连接
今天 搭建 Webscoket 服务, 测试 内网IP + 端口, 客户端连接没有任何问题. 运维同学配置了公网域名后, 测试 客户端连接 公网域名 你 4:27:10等待服务器Websocket握手包...你 4:27:12收到服务器Websocket握手包.服务器 4:27:12Websocket连接已建立,正在等待数据...服务器 4:27:12和服务器断开连接!就像上面一样 一直 握手 -> 连接建立 -> 断开. 问题是 我服务端 进到 onOpen 事件 想要主动回包给 客户端都做不到.$server->exist($fd) 返回的是false, 发现客户端行为不是长连接, 比较像短连接请求,更过分的是断连不挥手. 排除了一些可能后想到 是不是 运维的 Nginx 配置出错了. server { listen 80; server_name xxxx.xxx.com; ...
为SecureCRT工具设置代理连接SSH
SecureCRT工具设置代理连接SSH在使用SecureCRT工具进行SSH连接时,有时我们需要通过代理服务器进行连接。本文将介绍如何在SecureCRT工具中设置代理,以便顺利进行SSH连接。 步骤按照以下步骤设置SecureCRT工具的代理连接: 打开SecureCRT工具,并打开“选项”对话框。 在对话框左侧的选项列表中,选择“会话”。 在右侧的“默认设置”下,选择要配置代理的会话。 在会话选项卡中,选择“连接”。 在“代理”部分,勾选“使用代理”选项。 输入代理服务器的地址和端口号。 (可选)如果代理服务器需要身份验证,勾选“代理需要身份验证”选项,并提供相应的用户名和密码。 单击“确定”保存设置。 完成以上步骤后,SecureCRT工具将使用指定的代理服务器进行SSH连接。 注意事项在设置SecureCRT工具代理连接时,需要注意以下几点: 代理类型:SecureCRT支持多种代理类型,包括HTTP代理、SOCKS代理和Telnet代理。根据实际情况选择合适的代理类型。 代理地址和端口号:填写正确的代理服务器地址和端口号。可以咨询网络管理员或查看代理服务器的...



