这是不可能的。
你要求能逆推解密就决定了该算法是一个一对一算法。所有的一对一算法均可用查表法实现。而一旦输入的数字超过了上限,必然无法在表中查到。换句话说,假如一个17位的数字也能用该算法获得16位数字的密码,那么绝无可能做到一对一的解密。
那MD5来举例,不管输入多长,最终得到的特征码是有限长度的。所以MD5只能是一种抽样算法,必然存在相同MD5,但内容不同的一组输入。而MD5也绝对不可能逆推出源输入内容。
巧妇难为无米之炊,这里也一样,16位数字不可能唯一的标示一个17位数字的。
--------------------------------------------------
看了我的回答,直接补充提问…… 显得我好像眼神儿有问题?
'根据你的意思,简单1位数字加密。请采纳,谢谢!如有疑问,可以追问。
Function fun1(T As String)
'加密实现方法
Randomize
m1 = Int((16 - 3 + 1) * Rnd + 3)
For i = 1 To 14
m2 = m2 & Int((9 - 1 + 1) * Rnd + 1)
Next
m2 = Format(m1, "00") & m2
Mid(m2, m1, 1) = T
fun1 = m2
End Function
Function fun2(T As String)
'解密实现方法
fun2 = Mid$(T, Val(Mid$(T, 1, 2)), 1)
End Function
Private Sub Command1_Click() '加密
Text2.Text = fun1(Text1.Text)
End Sub
Private Sub Command2_Click() '解密
Text1.Text = fun2(Text2.Text)
End Sub
修改后的加密代码,保证每次加密结果都不一样。
请下载附件。
直接用des或3des加密,得到的字符串,用ascii码拼接成一串数字,不足16位时,在前面或后面补0
你说的估计很难,普通的算法稍微专业点的人看下就可以分析出来,你还要没有任何规律 估计不行