A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

红叶杉杉

初级黑马

  • 黑马币:0

  • 帖子:13

  • 精华:0

© 红叶杉杉 初级黑马   /  2012-7-27 18:48  /  3123 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

随机生成6位字符,中间可以包括数字,或是大写字母,或是小写字母
如纯数字:123456
或纯小写字母:asdgrv
或纯大写字母:ASJMVD
也可以混合输出:2f6Db7

用C#求解,谢啦!

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

12 个回复

倒序浏览
private void btnRand6_Click(object sender, EventArgs e)
        {
            string strAll = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";//生成的字符串可选字符
            Random rand = new Random();//实例化一个Random对象
            string strResult = "";//等待得到结果
            //循环得到要求的字符串
            for (int i = 0; i < 6; i++)
            {
                int j = rand.Next(0, 62);//从可选字符组中随机获取一个
                string strTmp = strAll.Substring(j, 1);
                strResult += strTmp;
            }
            txtStr.Text = strResult;//结果输出到文本框
        }

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
你是想产生62位内任意数字大小写字母的随机数,输出6个字符吧。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace T1论坛
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             //调用方法  
  12.             string str = GenerateRandom(6);
  13.             Console.WriteLine(str);
  14.             Console.ReadKey();
  15.         }
  16.         //定义一个常量
  17.         static char[] constant =   
  18.         {
  19.             '0','1','2','3','4','5','6','7','8','9',  
  20.             'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',   
  21.             'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
  22.         };
  23.         //定义生成随机数的方法
  24.         static string GenerateRandom(int Length)
  25.         {   //类的实例化
  26.             System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62);
  27.             Random rd = new Random();
  28.             //循环产生随机数
  29.             for (int i = 0; i < Length; i++)
  30.             {
  31.                 newRandom.Append(constant[rd.Next(62)]);
  32.             }
  33.             //返回值
  34.             return newRandom.ToString();
  35.         }
  36.     }
  37. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
张腾达 发表于 2012-7-27 18:58
private void btnRand6_Click(object sender, EventArgs e)
        {
            string strAll = "12345 ...

方法很好,谢谢!
回复 使用道具 举报
杨正 发表于 2012-7-27 19:19
你是想产生62位内任意数字大小写字母的随机数,输出6个字符吧。

方法很好,谢谢!
回复 使用道具 举报
张腾达 发表于 2012-7-27 18:58
private void btnRand6_Click(object sender, EventArgs e)
        {
            string strAll = "12345 ...

如果是破解6为字符strA(如:6qkm7F),用到的应该不是随机产生吧,应该是遍历62个字符,然后与strA中的第一个字符相匹配,如果匹配上,则与第二位字符相匹配,一直到完全匹配上,最后可以得到strA的字符是什么?
该怎么解呢,谢谢!
回复 使用道具 举报
支持  呵呵呵
回复 使用道具 举报
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace random
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Random rand = new Random();
  12.             StringBuilder sb = new StringBuilder();
  13.             for (int i = 0; i < 6; i++)
  14.             {
  15.                 int n = rand.Next(62);
  16.                 if (n < 10)
  17.                     sb.Append(n);
  18.                 else if (n < 36)
  19.                     sb.Append((char)(n + 'A' - 10));
  20.                 else
  21.                     sb.Append(Convert.ToChar(n + 'a' - 36));
  22.             }
  23.             string res = sb.ToString();
  24.             Console.WriteLine(res);
  25.             Console.ReadKey();
  26.         }
  27.     }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
红叶杉杉 发表于 2012-7-27 22:31
如果是破解6为字符strA(如:6qkm7F),用到的应该不是随机产生吧,应该是遍历62个字符,然后与strA中的第 ...

既然是破解,那么就是不知道strA为6qkm7F 那么如何从starA中取某个字符呢?
说说我的想法,大神们别笑。。。
你的思路是对的,遍历,不过不是一位一位的比较,因为你不知道strA的值是多少,
暴力破解其实就是穷举,挨个的试,例如从右侧开始,从数字递加到小写字母再到大写字母,
000000 不对再加
000001 再不对再加
000002
……
000009
00000a
……
00000z
00000A
……
00000Z
然后再把倒数第2位加一下,再遍历最后一位

再简单点解释就是假设他的密码是6位纯数字 那么只有1000000种排列,从000000递增加到999999,肯定会得到密码吧。加上小写字母和大写字母,这个排列数就太大了···

其实上边的例子说了另一种缩小字符组合的范围的方法,遍历字典,还有规则破解,比如你知道他的后3位是数字,或者是生日组合,那么组合数量就会减少很大一部分。

纯暴破的话,主要看机器配置和人品了,没准从000000开始,strA就是123456呢,哈  

语言组织能力不好,凑合看吧..:victory:

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你这个跟产生验证码有些大致过程相像,采用Random产生随机数(6位的随机数),之前定义一个字符数组,然后根据这产生的随机数进行索引,字符数组中的字符,然后输出.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报


public class test1 {
       
        public static void main(String[] args){
                //声明随机变量
                int suiji = (int)(Math.random()*100);
                suiji = 22;
                //结果字符串
                String result = "";
               
                if (suiji > 78){
                        Integer intObj = (int)(Math.random() * 1000000 + 100000);
                        result = intObj.toString();
                }
                else if (suiji > 50){
                        //小写字符转化为字符串
                        for (int i = 0; i < 6; i ++ ){
                                //临时字符变量
                                char temp = (char)('a' + (int)(Math.random() * ('z' - 'a')));
                                result += String.valueOf(temp);
                        }
                }
                else if (suiji > 28){
                        //大写字符转化为字符串
                        for (int i = 0; i < 6; i ++ ){
                                //临时字符变量
                                char temp = (char)('A' + (int)(Math.random() * ('Z' - 'A')));
                                result += String.valueOf(temp);
                        }
                }
                else {
                        //声明一个字符数组,默认为’a'字符
                        char[] ch = {'a', 'a', 'a', 'a', 'a', 'a'};
       
                        for(int i = 0; i < 6; i++){
                                //声明一个临时随机变量
                                int temp = (int)(Math.random() * 100);
                                //随机添加字符
                                if (temp > 70)
                                        ch[i] = (char)('A' + (int)(Math.random() * ('Z' - 'A')));
                                else if (temp > 40)
                                        ch[i] = (char)('a' + (int)(Math.random() * ('z' - 'a')));
                                else
                                        ch[i] = (char)('0' + (int)(Math.random() * ('9' - '0')));
                        }
                       
                        result = String.valueOf(ch);
                }
               
                //输出结果
                System.out.println("结果为:"+ result);
        }

}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
不好意思,上面多加了一行,第五行suiji=22,去掉
回复 使用道具 举报


public class test1 {
       
        public static void main(String[] args){
                //声明随机变量
                int suiji = (int)(Math.random()*100);
                //结果字符串
                String result = "";
               
                if (suiji > 78){
                        Integer intObj = (int)(Math.random() * 1000000 + 100000);
                        result = intObj.toString();
                }
                else if (suiji > 50){
                        //小写字符转化为字符串
                        for (int i = 0; i < 6; i ++ ){
                                //临时字符变量
                                char temp = (char)('a' + (int)(Math.random() * ('z' - 'a')));
                                result += String.valueOf(temp);
                        }
                }
                else if (suiji > 28){
                        //大写字符转化为字符串
                        for (int i = 0; i < 6; i ++ ){
                                //临时字符变量
                                char temp = (char)('A' + (int)(Math.random() * ('Z' - 'A')));
                                result += String.valueOf(temp);
                        }
                }
                else {
                        //声明一个字符数组,默认为’a'字符
                        char[] ch = {'a', 'a', 'a', 'a', 'a', 'a'};
       
                        for(int i = 0; i < 6; i++){
                                //声明一个临时随机变量
                                int temp = (int)(Math.random() * 100);
                                //随机添加字符
                                if (temp > 70)
                                        ch[i] = (char)('A' + (int)(Math.random() * ('Z' - 'A')));
                                else if (temp > 40)
                                        ch[i] = (char)('a' + (int)(Math.random() * ('z' - 'a')));
                                else
                                        ch[i] = (char)('0' + (int)(Math.random() * ('9' - '0')));
                        }
                       
                        result = String.valueOf(ch);
                }
               
                //输出结果
                System.out.println("结果为:"+ result);
        }

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马