thinkphp数据库配置信息加密怎么处理

thinkphp数据库配置信息加密怎么处理,第1张

今天有一个朋友问我thinkphp的这个问题,刚好百度搜索到你这个问题。已经解决。就帮你解答一下这个问题。

首先我尝试在入口文件封装一个加密函数,我用php des 加密,然后在配置文件config.php调用。然后在控制器里面使用,打印配置文件:dump(C())//输出所有的配置文件信息, 虽然能看到正确的数据用户名和密码,但是会报错。失败告终。

我说一下我的解决方法。很简单。

1:把配置文件里面的用户名,密码,数据库名瞎写一写,别人看到你的代码的配置文件看到的就是错误的数据库名和密码了。比如:

'DB_NAME' => 'SB', // 数据库名

'DB_USER' => 'ni_da_ye', // 用户名

'DB_PWD'=> 'da_da_bi', // 密码

在每个控制器文件里面。加入一段代码。

比如你的IndexController.class.php文件。加下面的代码。

/* 初始化方法*/

public function __construct(){

parent::__construct()

C("DB_NAME",decrypt('712349721937491237'))//数据库名,

C('DB_USER',decrypt('712349721937491237'))//用户名

C('DB_PWD',decrypt('712349721937491237'))//密码

}

看清楚了吗?

decrypt()这个函数就是我封装的一个加密函数,亲自测试没有错误。可能会牺牲一些性能。但是保证了用户名,密码,数据库名没有泄露。甚至你都可以把数据库连接地址也加密一下。希望能帮到你。

PHP加密函数可以考虑用des,aes这些可逆加密。别用什么md4,md5.

/*

1.利用对称密钥

搭配EncryptByKey进行数据jiami

使用DecryptByKey函数进行jiemi

这种方式比较适合大数据量

*/

CREATE SYMMETRIC KEY ZXC WITH ALGORITHM = AES_256 ENCRYPTION BY PASSWORD = 'ZXC123456'

OPEN SYMMETRIC KEY ZXC DECRYPTION BY PASSWORD = 'ZXC123456'

--jiami

SELECT Encryptbykey(Key_guid('ZXC'), 'YHDH_C')

--jiemi

SELECT CONVERT(VARCHAR(10), Decryptbykey(0x001B05DF93A12F4A941E64A06B9AEE94010000007582B2C772953F1A6ABC7298E126B76A22A6815115466653D11D6D1F23641DA6))

CLOSE SYMMETRIC KEY ZXC

DROP SYMMETRIC KEY ZXC

/*

2.利用非对称密钥

搭配EncryptByAsymKey进行数据jiami

使用DecryptByAsymKey函数进行jiemi

用于更高安全级别的加jiemi数据

*/

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'XIAOMA'

CREATE ASYMMETRIC KEY ABC WITH ALGORITHM=RSA_2048 ENCRYPTION BY PASSWORD = 'ZXC123456'

ALTER ASYMMETRIC KEY ABC WITH PRIVATE KEY (DECRYPTION BY PASSWORD = 'ZXC123456')

--jiami

Select Encryptbyasymkey(Asymkey_id ('ABC'), 'ZXC123456')

SELECT CONVERT(VARCHAR(100), Decryptbyasymkey (Asymkey_id('ABC'),0xDA7081BE942896AE961589B5BC8ABDA88BF28DBECD4AB0F9EF1C1666591511BE4D2659EE01B8686002946A8EF7074B14CFFBFF042F21D4F86878EAD8B24E1CF29031D89315D20F70F456A69D74491652522035A0B394E412B0AF52198E665C3E163765A2095D654E6922E0F94E0FAD83C6C322E56C910DBEACD3FF98C912F153B4C701431A74E6A10EAF342491345B0D1D47C49B8895EB02E0152EABFC19A3FA4BD857F228B7082F0195DFEB82E734E0B0722798D2382D1F2FEC8203CCA302B8E80D06913A168C50011FD0A526A1088C55EA905AFB97AC414CBDACD4A28BCC4CD3CBDC8140851057A3E6882F17DA914ECFFC01A196B1F7E7B7AC3E945E106D82 ))

DROP ASYMMETRIC KEY ABC

DROP MASTER KEY

/*

3.利用凭证的方式

搭配EncryptByCert进行jiami

DecryptByCert函数进行jiemi

比较类似非对称密钥

*/

CREATE CERTIFICATE ZXC

ENCRYPTION BY PASSWORD = 'xiaoxiao'

WITH SUBJECT = 'DB_Encrypt_Demo Database Encryption Certificate',

START_DATE = '2015-10-1'

--jiami

Select Encryptbycert(Cert_id('ZXC'), '123456')

--jiemi

SELECT convert(Varchar(10), Decryptbycert(Cert_id('ZXC'), 0xB4E223CC08A73DE5AFE81A6FF14E76503CF55066EE8186F0781942E54B4FA97D3B49D9A16A102398311F9B259D3E2F23F0B35D3720F4AAB08357850D96A7E43494A306D227A29812BA62A33B39AC600D6585EA6B03F5F97A012C5A0BE7BC52FF60519421BD8D09311F10CC55EEA166FDBFAD2A5D9E2D3043A215AE27A918E35B,N'xiaoxiao'))

DROP CERTIFICATE ZXC

/*

4.利用mima短语方式

搭配EncryptBypassPhrase进行jiami

使用DecryptByPassPhrase函数来jiemi

比较适合一般的数据加jiemi

*/

--jiami

Select Encryptbypassphrase('xiaoma', '123456')

--jiemi

SELECT CONVERT(VARCHAR(100), Decryptbypassphrase('xiaoma',0x01000000435DFA417C8E1A1417D901357378A1864F721EAA53DCD800 ))

服务端生成Sec-WebSocket-Accept规则:服务端将客户端传递的key进行去除首尾空白,然后和一段固定的GUID(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)进行连接,连接后的结果使用SHA-1(160数位)进行哈希 *** 作,对哈希后的字符串进行base64编码,即为Accept内容。

websocket本质就是一个创建连接后不断开的socket,当连接成功之后,客户端(浏览器)会自动向服务端发送消息,服务端接收之后,会对于该数据进行加密。

WebSocket是一种在单个TCP连接上进行全双工通信的协议。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6718768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存