C++ 在电子邮件地址内移动点(周期)的算法
对于那些不了解GMAIL的人来说,GMAIL允许你在原始邮件的基础上创建无限数量的邮件。如果您的电子邮件是“mygmail@gmail.com“那么这可以通过两种方式实现: 1) 在gmail末尾的“+”后面添加文本,例如mygmail+somethinghere@gmail.com 所有电子邮件仍将发送至mygmail@gmail.com 2) 把“.”放在你的gmail地址内(开头和结尾除外),例如m。ygmail@gmail.com,m.y。gmail@gmail.com,m.yg.mai。l@gmail.com注:我的。。gmail@gmai.com及mygmail@gm.ail.com不行 我正在测试一个需要通过有效电子邮件地址注册的应用程序(发送电子邮件激活)。方法(1)是执行此操作的最简单方法,但电子邮件地址字段中不允许“+”。这意味着我需要使用方法(2)创建一个gmail帐户数据库 有人能帮我做一个算法(最好是C/C++代码),我可以提供一段文本,它可以生成所有可能的变体吗 一些快速的数学计算表明,可能的组合数为2^(n-1),其中n是电子邮件中的字符数C++ 在电子邮件地址内移动点(周期)的算法,c++,algorithm,gmail,C++,Algorithm,Gmail,对于那些不了解GMAIL的人来说,GMAIL允许你在原始邮件的基础上创建无限数量的邮件。如果您的电子邮件是“mygmail@gmail.com“那么这可以通过两种方式实现: 1) 在gmail末尾的“+”后面添加文本,例如mygmail+somethinghere@gmail.com 所有电子邮件仍将发送至mygmail@gmail.com 2) 把“.”放在你的gmail地址内(开头和结尾除外),例如m。ygmail@gmail.com,m.y。gmail@gmail.com,m.yg.mai
谢谢伪代码为您提供了另一个解决方案。正如你所说,这里有2^(n-1)个组合,其中n是电子邮件字符串的长度,因此我们用0到2^(n-1)-1的数字范围对点的位置进行编码 假设s是您的电子邮件地址,没有@part(在您的示例中是mygmail) 现在,如果您不想要所有的2^(n-1)组合(如果n>15,则可能太大),只需为第一个for循环加上上限,例如: 对于i=0到999,获得前1000个组合
在C/C++中,2^(n-1)转换为1>j)&1)。您是否考虑过有人可以通过使用101个字符的电子邮件地址注册来执行DNS攻击(只需看看服务器生成2^100个字符串并将其存储在数据库中需要多长时间)。您到底在尝试实现什么?如果电子邮件地址符合RFC3696(第3节),则该地址为“有效电子邮件地址”,您的应用程序不应进行进一步检查。您是否正在编写特殊的大小写代码,将“gmail.com”域与所有其他域区别对待?@AdamMihalcin验证也可以使用reg-ex进行。显然,不是针对已注册的电子邮件,而是针对有效的电子邮件。@Jon您完全正确。但我刚才解释说,在面向公众的服务器上实现“一种算法(最好是C/C++代码),在这种算法中,我可以提供一段文本,并生成所有可能的变体”,这是个坏主意。@user1282312您可能不理解Adam说的话。试着用一封包含30个或更多字符的电子邮件运行ElKamina的代码,看看会发生什么。谢谢Duc。这甚至更好。
def generateComb(cur,rem):
if len(rem)>0:
generateComb(cur +rem[0], rem[1:])
generateComb(cur+'.'+rem[0], rem[1:])
else:
print cur
generateComb('m','ygmail')
n = length(s)
for i = 0 to 2^(n - 1) - 1
s2 = ''
for j = 0 to n - 2 do
s2 = s2 + s[j]
if (bit j in i is set)
s2 = s2 + '.'
s2 = s2 + s[n - 1]
print s2