atm-irbis

Simple encoder

May 27th, 2012
517
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×