LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1345|回复: 5

我写的一个非逆向密码加密算法。(Basic)

[复制链接]
发表于 2007-5-16 22:16:26 | 显示全部楼层 |阅读模式
不过算法原理是一样的。不知道强度如何,有条件的请帮忙测试一下。
本人对其还是有点自信的。

很容易可以将其化为perl或php的。因为算法很简单。



  1. Function encode16(str As String)
  2.     Dim ecBuf(17), ecBase, i, strLen, ecStep
  3.     Dim ecHexchr As String
  4.    
  5.     ecHexchr = "0123456789ABCDEF"
  6.    
  7.     strLen = Len(str)
  8.     If strLen > 16 Then strLen = 16
  9.    
  10.     For i = 0 To strLen - 1
  11.         ecBuf(i) = Asc(ChrAt(str, i + 1))
  12.     Next
  13.     For i = strLen To 15
  14.         ecBuf(i) = ecBuf(i - strLen) + (ecBuf(i - strLen) Mod (8 + i))
  15.     Next
  16.    
  17.     Rem #############
  18.     Rem
  19.     Rem     Step 1 :shift step by step
  20.     Rem #############
  21.    
  22.     For i = 0 To 15
  23.         tmp_ = ecBuf(i) Mod 16
  24.         ecBuf(tmp_) = (ecBuf(i) + ecBuf(tmp_)) Mod 256
  25.     Next
  26.    
  27.     Rem ################################
  28.     Rem
  29.     Rem     step 2 :
  30.     Rem ################################
  31.     ecStep = 7
  32.     For ecBase = 0 To 15 - ecStep
  33.         For i = 0 To ecStep
  34.             tmp_ = ecBuf(i) Mod (ecStep + 1)
  35.             ecBuf(tmp_) = (ecBuf(ecBase + i) + ecBuf(ecBase + tmp_)) Mod 256
  36.         Next
  37.     Next
  38.    
  39.     ecBuf(16) = ecBuf(0)
  40.     For i = 0 To ecStep
  41.         tmp_ = ecBuf(i) Mod (ecStep + 1)
  42.         ecBuf(tmp_) = (ecBuf(ecBase + i) + ecBuf(ecBase + tmp_)) Mod 256
  43.     Next
  44.    
  45.     ecBuf(0) = ecBuf(16)
  46.    
  47.     Rem ###############################
  48.     Rem
  49.     Rem     step 3:
  50.     Rem ###############################
  51.    
  52.     For i = 0 To 15
  53.         tmp_ = ecBuf(i) Mod 16
  54.         ecBuf(i) = (ecBuf(i) + ecBuf(tmp_)) Mod 256
  55.     Next
  56.    
  57.    
  58.    
  59.     encoce16 = ""
  60.    
  61.     For i = 0 To 15
  62.         encode16 = encode16 + ChrAt(ecHexchr, ecBuf(i) Mod 16 + 1)
  63.     Next
  64. End Function
复制代码
发表于 2007-5-18 11:57:58 | 显示全部楼层
昏,程序不是问题,考验我高中的 basic 了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-18 18:46:38 | 显示全部楼层
呵呵。有些时候也是要用到Basic的,比如ASP


忘了加上另一个chrAt函数了。现补上。
  1. Function ChrAt(str As String, n As Integer) As String
  2.     If (n > 0 And n <= Len(str)) Then
  3.         ChrAt = Mid(str, n, 1)
  4.     Else
  5.         ChrAt = ""
  6.     End If
  7. End Function
复制代码

使用例:
  1. rem input user_Name as user's name. ==>User_Name.
  2. rem run a query to get the password of the user( by user_Name)==>DB_Psw
  3. rem get the user's password that required by the FROM of HTML document.==>FR_Psw
  4. if encode16(FR_Psw)=DB_Psw then
  5.    MsgBox("Login successful!!")
  6. else
  7.    MsgBox("Invalid username or password!!")
  8. end if
复制代码

当然,DB_Psw也是要先经过encode再加入到数据库中的。

encode16("0")="2A21B44A802F24FA"
encode16("test")="0DA000A508004C0E"
encode16("ok")="0C000A030D284A20"


不过,16位太小了。算起来,密文空间只有16^16,也就是2^64位长。比MD5要128位要短一半。不过,你要想将其化为256位也没什么大总是。
回复 支持 反对

使用道具 举报

发表于 2007-6-5 10:56:42 | 显示全部楼层
what is 非逆向密码加密算法? u mean one-way function, hash function , however, there are many kinds of hash functions and compress function. which one u used or u created a one-way function by urself?
回复 支持 反对

使用道具 举报

发表于 2007-6-5 10:57:41 | 显示全部楼层
I don't know how to use basic, and ASP language. but I want to know ur algorithm
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-5 14:39:48 | 显示全部楼层
Post by Heefan
what is 非逆向密码加密算法? u mean one-way function, hash function , however, there are many kinds of hash functions and compress function. which one u used or u created a one-way function by urself?


The algorithm that I used is a function  like compress function&hash function.I mease I just mix then up.

Ps:U can't learn a programing language.U just use it.So,I don't know what the mean of  a station that like "I can't understand BASIC". Of course,IF YOU UNDERSTAND ENGLISH!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表