Chinaunix

标题: [求教]插入随机字符串 [打印本页]

作者: gavinzhm    时间: 2008-06-27 17:11
标题: [求教]插入随机字符串
现有代码如下

  1. dn: uid=arai,ou=Users,dc=yepn,dc=net

  2. dn: uid=asahara,ou=Users,dc=yepn,dc=net

  3. dn: uid=izumi,ou=Users,dc=dc=yepn,dc=net

  4. dn: uid=keizo,ou=Users,dc=yepn,dc=net

  5. dn: uid=kotori,ou=Users,dc=yepn,dc=net

复制代码


生成一串随机字符串放在password: 后面

随机字符串代码

  1. #!/bin/bash
  2. MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$&*"
  3. LENGTH="10"
  4. while [ "${n:=1}" -le "$LENGTH" ]
  5. do
  6. PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
  7. let n+=1
  8. done
  9. echo "$PASS"

复制代码



想变成

  1. dn: uid=arai,ou=Users,dc=yepn,dc=net
  2. password: $PASS 这个地方想放$PASS的值
  3. dn: uid=asahara,ou=Users,dc=yepn,dc=net
  4. password:
  5. dn: uid=izumi,ou=Users,dc=dc=yepn,dc=net
  6. password:
  7. dn: uid=keizo,ou=Users,dc=yepn,dc=net
  8. password:
  9. dn: uid=kotori,ou=Users,dc=yepn,dc=net
  10. password:
复制代码


先谢过!!
作者: merlin852    时间: 2008-06-27 17:49
sed "/^dn/a${pass}" file
作者: 寂寞烈火    时间: 2008-06-27 17:54
while read line;do ((++n));((n%2==0))&&echo passwd: $((RANDOM))||echo $line;done < urfile
如果产生随机数, 情参阅:
http://bbs.chinaunix.net/thread-551026-1-1.html

[ 本帖最后由 寂寞烈火 于 2008-6-27 17:55 编辑 ]
作者: gavinzhm    时间: 2008-06-27 18:08
谢谢楼上的两位朋友~~

to 烈火
$RANDOM
这个只能产生随机的数字~~
我想做密码用~~我在论坛找了段代码~可以实现随机字符串~~
也看过你以前的贴子~~产生随机符串~
作者: gavinzhm    时间: 2008-06-27 18:24
原帖由 merlin852 于 2008-6-27 17:49 发表
sed "/^dn/a${pass}" file


不好意思~是我没说清楚~
不是插件PASS~
是想把上面随机生成的那个字符串的变量PASS的值显示到后面~
好实在给每个用户不同的密码~
作者: walkerxk    时间: 2008-06-27 18:38
关于随机数:echo -n $RANDOM|md5sum|head -c8
含有数字和abcde。
作者: gavinzhm    时间: 2008-06-27 18:53
原帖由 walkerxk 于 2008-6-27 18:38 发表
关于随机数:echo -n $RANDOM|md5sum|head -c8
含有数字和abcde。


谢谢~~
但是只有数字和abcde
有点太简单了~~~
还有别的办法吗~?
我想把上面那段生成随机字符串的代码放到循环中~~
但是总生成一个密码~~
还在试~~


作者: walkerxk    时间: 2008-06-27 19:09
是不是伪随机的问题?因为电脑上的随机一般都是计算出来的,如果你种子没变,产生的随机数都是一样的,一般用时间作为种子,这样比较好。
作者: gavinzhm    时间: 2008-06-27 19:22
原帖由 walkerxk 于 2008-6-27 19:09 发表
是不是伪随机的问题?因为电脑上的随机一般都是计算出来的,如果你种子没变,产生的随机数都是一样的,一般用时间作为种子,这样比较好。


是的~谢谢指点~~
现在随机密码到是变了~不知道为什么位数总会不一样~晕~呵呵~~
作者: r2007    时间: 2008-06-27 19:33
用base64编码一下,或用MD5等。
作者: springwind426    时间: 2008-06-27 19:35

  1. dd if=/dev/random bs=512 count=1 2>/dev/null| md5sum | sed 's/\(.\{10\}\).*/\1/'
复制代码


能够得到随机的10位字符串,如果需要得到其他长度的,可以把那个10改一下
作者: gavinzhm    时间: 2008-06-27 20:22
谢谢楼上的各位朋友帮助~~
偶现在弄是弄出来了~不过也是有够复杂的~~
不知道有没有简单的方法~~
水平有限~各位别见笑!!!

  1. #!/bin/bash
  2. array=(a b c d e f g h i j k l m n o p q r s t u v \
  3. w x y z A B C D E F G H I J K L M N O P Q R S T U V\
  4. W X Y Z 0 1 2 3 4 5 6 7 8 9)
  5. n=1
  6. while read line
  7.    do
  8.      i=1
  9.        a=`while [ "$i" -le 10 ]
  10.            do
  11.                printf ${array[$((RANDOM%${#array[@]}))]}
  12.                i=$((i+1))
  13.            done`
  14.      PASS=`echo $a|head -c8`
  15.      n=$((n+1))
  16.      echo $line
  17.      if ((n%2==0))
  18.        then
  19.            echo "add: radiusUserPassword"
  20.            echo "radiusUserPassword: " $PASS
  21.      fi
  22. done < user.ldif

复制代码

[ 本帖最后由 gavinzhm 于 2008-6-27 20:24 编辑 ]
作者: walkerxk    时间: 2008-06-27 20:43
原帖由 springwind426 于 2008-6-27 19:35 发表

dd if=/dev/random bs=512 count=1 2>/dev/null| md5sum | sed 's/\(.\{10\}\).*/\1/'


能够得到随机的10位字符串,如果需要得到其他长度的,可以把那个10改一下

这个我发过,他说只有数字和abcdef太简单了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2