Advertisement
atm-irbis

Simple encoder

May 27th, 2012
3,230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Icon 1.54 KB | None | 0 0
  1. link random
  2.  
  3. procedure main()
  4. local u,crp
  5. u:=read()
  6. crp:=read()
  7. write(encode(u,crp))
  8. end
  9.  
  10. #кодирование строки шифром Вернама
  11. procedure encode(u,keys)
  12. local l,i,s,v,key,g,t
  13. t:=" !~`@#$%^&*(),.<>/?|\{}[]-+=_:;№"
  14. s:=&letters++&digits++t
  15. l:=list()
  16. v:=list()
  17. key:=keys
  18. if key=="" then key:=gen_pass(*u)
  19. until (*key)>=(*u) do {
  20.  key||:=key
  21. }
  22. every put(l,to_bin(find(!u,s)))
  23. every put(v,to_bin(find(!key,s)))
  24. g:=xor_list(l,v)
  25. return index_from(g,s)
  26. end
  27.  
  28. #перевод в двоичную систему
  29. procedure to_bin(x)
  30. local r,s,n
  31. n:=x
  32. s:=""
  33. while n>=1 do {
  34.  r:=n%2
  35.  s:=s||r
  36.  n:=integer(n/2)
  37. }
  38. s:=reverse(s)
  39. while *s~=8 do {
  40.   s:="0"||s
  41. }
  42. return string(s)
  43. end
  44.  
  45. #исключающее "или" для двух списков
  46. procedure xor_list(l1,l2)
  47. local a,b,i,j,c,d,n,m
  48. n:=list()
  49. every i:=1 to *l1 do {
  50.     c:=l1[i]
  51.     d:=l2[i]
  52.     m:=""
  53.     every j:=1 to *c do {
  54.         m:=m||ixor(c[j],d[j])
  55.     }
  56.     put(n,m)
  57. }
  58. return n
  59. end
  60.  
  61. #перевод из двоичной системы в десятичную
  62. procedure to_dec(d)
  63. local b,i,v
  64. b:=0
  65. v:=reverse(d)
  66. every i:=1 to *d do {
  67.   b:=b+((2^(i-1))*v[i])
  68. }
  69. return b
  70. end
  71.  
  72. #генерация шифротекста
  73. procedure index_from(g,s)
  74. local i,v,n
  75. v:=""
  76. every i:=1 to *g do {
  77.     n:=to_dec(g[i])
  78.     v:=v||s[n]
  79. }
  80. return v
  81. end
  82.  
  83. #генерация "хорошего пароля" из n знаков
  84. procedure gen_pass(n)
  85. local s,i,a
  86. a:=""
  87. s:=&letters++&digits
  88. randomize()
  89. every i:=1 to n do {
  90.  a:=a||s[?(*s)]
  91. }
  92. return a
  93. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement