我有一个客户端要求使用128位加密对MySQL数据库中存储的所有数据进行加密。
假设在将所有数据插入数据库之前,运行PHP函数对其进行加密。然后,当我从数据库中提取数据时,我运行一个解密函数来吐出原始文本/信息。
有人能指出我正确的方向吗?我知道这些函数将使用共享/公共密钥进行加密和解密,但是什么使它成为128位? PHP中是否有预先构建的函数来执行此操作?
感谢任何建议。
斯科特
答案 0 :(得分:1)
我希望here是您的解决方案。在页面上引用两个函数encrypt
和decrypt
并抓住这个想法。
答案 1 :(得分:1)
是的。你需要研究使用加密的类/ API,他们必须提到它们。他们还依赖algoritham你正在使用哪种算法。请follow this link to learn more about this。{{3}关于加密的breif解释。你可以找到Here is a,但更推荐sample of code here
答案 2 :(得分:1)
通常,“128位加密”是指使用128位密钥的symmetric encryption。 AES - 128是加密算法的绝佳选择。
您还需要选择mode of operation:如果您只需要隐私,CBC,CFB,OFB和CTR都是不错的选择,但如果您还希望保护数据不被篡改,则应使用{ {3}}模式,例如authenticated encryption。除非所有记录都短于单个AES块(也是128位),否则不使用ECB模式,并且最好不要使用ECB模式。
根据您选择的模式,您通常还需要为每条记录生成初始化向量(IV),该初始向量应该是唯一且不可预测的随机密码块(AES为128位)。有很多种方法可以生成一个,但是两个好方法(EAX)要么使用recommended by NIST的输出,要么在ECB模式下加密唯一ID(这是少数几种情况之一)可以使用)。根据您使用的加密库,它可能会为您解决此问题。请注意,如果您更改了记录中的加密数据,则应始终更改IV。
正如其他答案所指出的,如果你使用PHP,cryptographically secure pseudorandom number generator是加密库的一个很好的选择。