我可以创建一个PHP脚本来使用自定义加密密钥对事物进行加密,并使其安全吗?
说我有一个密码password
,我有一个数组,其中包含用一系列字母和数字替换每个字母和数字的值,我使用了preg_replace
。如果每个字母和数字的值都是唯一的,它是否安全,甚至可能比标准加密方法更安全?
请记住,之前我还没有做任何加密工作,只是想知道这是否有效。主要问题是它是否安全。
编辑: 所以,我做了一个简单的功能来使用我原来想到的东西,它改变了#34;快速的棕色狐狸跳过懒狗"到
Tv596 l34j 0v9 b75 75 v596 l34j 0v9 b75 75 l34j 0v9 b75 v596 l34j 0v9 b75 75 9 ll34j l34j 0v9 09 ghf9 l34j l34j 0v9 09 57 7 cn0n l34j f3ghf9 l34j l34j 0v9 09 5v596 l34j 0v9 b75 75 l34j 0v9 b75 v596 l34j 0v9 b75 75 9 56bv d543 a608v 4v596 l34j 0v9 b75 75 l34j 0v9 b75 v596 l34j 0v9 b75 75 9 ghf9 l34j l34j 0v9 09 57 dg53 608v n56bv h6 608v 45f l34j 0v9 b75 ;9 dg53 v596 l34j 0v9 b75 cn0n ghf9 df5 5fg6 v596 l34j 0v9 b75 75 l34j 0v9 b75 v596 l34j 0v9 b75 75 9 56bv cn0n 7ghf9 l34j l34j 0v9 09 57 dg53 l34j 0v9 v596 l34j 0v9 b75 75 l34j 0v9 b75 v596 l34j 0v9 b75 75 9 ghf9 l34j l34j 0v9 09 57 l34j l34j 0v9 09 v596 l34j 0v9 b75 75 v596 l34j 0v9 b75 75 l34j 0v9 b75 v596 l34j 0v9 b75 75 9 l608v 45f l34j 0v9 b75 ;9 6ghf9 v596 l34j 0v9 b75 75 l34j 56bv 56bv cn0n 7ghf9 l34j l34j 0v9 09 57 dg53 608v 45f
基本上是一长串数字,所以如果有人可以详细向我解释如果密钥是私有,那么这将是不安全的。
答案 0 :(得分:2)
根据您使用的字词和提出问题的概念级别,我有信心得出结论,不能,您无法设计出一种在任何有意义的意义上都是安全的加密算法,即使在十年之内也是如此。时间,因为你缺乏相关科学的大量知识和教育。不要太过刻苦;世界上只有成千上万的人有创造安全密码的现实机会,大多数时候,他们也搞砸了。
至于你提出的具体方案:这是一个替代密码,当Caesar使用同类产品时,它可能已经不安全了。它的关键"是替换表。统计分析(粗略地,自动检查各种子串发生的频率并将其与明文中的字母频率进行比较)可以轻松减少尝试的选项数量。如果您的攻击模型包含已知明文攻击(坦率地说,大多数应用程序确实需要担心这一点),安全就会出现在窗外:攻击者立即学会了解已知消息中使用的所有字母的替换。可能还存在各种更大的弱点,具体取决于您选择替换的准确程度。
最后,即使你是天堂的密码学之神,加密也不是我们的问题。我们有几个密码,根据任何现实的估计,在未来几十年内足够安全,并且数十个候选函数排成一个权宜之计,以防一些天才在密码分析中取得意想不到的进步。实际上没有理由设计自己的密码。 使用经过审核的标准解决方案。
答案 1 :(得分:1)
这被称为Substitution Cipher。
只要它是否安全,一般来说,它不是。
有一种安全的结构,称为一次性垫。
基本上,您为纯文本的每个字符构造唯一的替换。这通常被视为一种加法操作。所以关键是一系列“抵消”。然后将密钥添加到纯文本中。
key = 01 02 01 05 01
plaintext = "apple"
ciphertext = "brqqf"
这是一个简单的密钥(真正的密钥是完整的字节)。
这是安全的,提供您从不重新使用密钥(因此一次性)。如果你重复使用密钥,即使只是一次,那么安全性也会崩溃。
这也意味着你的密钥必须至少与明文一样长。
现实世界的对称密码(使用单个密钥)今天使用这个原理作为块或比特流。两者都可以以类似的方式使用,其中密码生成密钥流,然后将密钥流添加到明文中以生成密文。
Here's a video I did on the matter
关于编辑,我引用Bruce Schneier的话:
任何人,从最无能的业余爱好者到最好的密码学家,都可以创建一个他自己无法破解的算法。
事实上你不知道如何打破它,并且没有人打破它并不意味着它不会被打破。
现在,您的安全性与算法秘密有关。我们称之为Security Through Obscurity。知道算法是否安全的唯一方法是发布算法本身。然后人们可以分析它并确定安全性是否确实取决于密钥。
即使系统的所有内容(密钥除外)都是公共知识,密码系统也应该是安全的。