【问题标题】:All permutations of a Windows license keyWindows 许可证密钥的所有排列
【发布时间】:2013-01-14 09:46:38
【问题描述】:

我需要为我的笔记本电脑申请 Windows 8 升级,为此我需要笔记本电脑底部的 Windows 7 许可证密钥。

因为 Microsoft 以他们的无限智慧决定创建会失效的许可证标签,而我无法清楚地读取我的许可证密钥,这意味着我无法使用自动化流程为我的笔记本电脑注册 Windows 升级优惠。

通过将笔记本电脑与灯光成一定角度,我能够验证大部分代码,但有几个字母不明确(再次感谢 Microsoft 在标签中使用容易误读的字符)。

我有以下(混淆的)许可证密钥,

MPP6R-09RXG-2H[8B]MT-[B8]K[HN]M9-V[6G]C8R

其中方括号中的字符不明确,因此它是8BB8HN6G

制作 16 种组合。

使用 itertools 生成此许可证密钥的可能排列是否合适,或者有更好的方法吗?

感谢贡献者,我得到了正确的密钥。检查密钥是否有效的一种非常方便的方法是使用Windows 7 product key checker

【问题讨论】:

  • 我认为你可以手动列出十六种组合,最终可能会花费更少的时间。
  • 这么酷的问题。 +1
  • 我真的希望您更改了一些可识别的字符,并且您没有在 Internet 上发布您真正的 Windows 密钥...
  • 嘿,发到codegolf.stackexchange.com 会是一个非常有趣的问题
  • @rodrigo 是的,我混淆了代码 :)

标签: python itertools


【解决方案1】:

免责声明:是的,我知道这不是Python 代码。它突然出现在我的脑海中,我只是不得不把它写下来。

最简单的方法是使用shell扩展:

$ echo MPP6R-09RXG-2H{8,B}MT-{B,8}K{H,N}M9-V{6,G}C8R
MPP6R-09RXG-2H8MT-BKHM9-V6C8R
MPP6R-09RXG-2H8MT-BKHM9-VGC8R
MPP6R-09RXG-2H8MT-BKNM9-V6C8R
MPP6R-09RXG-2H8MT-BKNM9-VGC8R
MPP6R-09RXG-2H8MT-8KHM9-V6C8R
MPP6R-09RXG-2H8MT-8KHM9-VGC8R
MPP6R-09RXG-2H8MT-8KNM9-V6C8R
MPP6R-09RXG-2H8MT-8KNM9-VGC8R
MPP6R-09RXG-2HBMT-BKHM9-V6C8R
MPP6R-09RXG-2HBMT-BKHM9-VGC8R
MPP6R-09RXG-2HBMT-BKNM9-V6C8R
MPP6R-09RXG-2HBMT-BKNM9-VGC8R
MPP6R-09RXG-2HBMT-8KHM9-V6C8R
MPP6R-09RXG-2HBMT-8KHM9-VGC8R
MPP6R-09RXG-2HBMT-8KNM9-V6C8R
MPP6R-09RXG-2HBMT-8KNM9-VGC8R

【讨论】:

  • 我知道这不是python代码。它突然出现在我的脑海中,我喜欢它的想法。无需对这个答案投反对票。 :-(
  • 不是 python,但仍然是一个漂亮的解决方案。
  • +1... 和 Windows(据我所知)没有这种“扩展”...但你总是可以使用 Cygwin
  • 好吧,Windows 可能没有它,但如果您需要迭代您的 Linux 许可证密钥.. 哦等等,这是我喜欢 linux 的另一个原因
  • 它不仅短小精悍,而且以非常干净的方式给出了复制和粘贴的答案。实际上有第五个变量,我得到了我的钥匙!!我实际上把“写下来”的任务交给了一位同事,他放弃了!非常感谢。
【解决方案2】:
from itertools import product
for perm in product('8B', 'B8', 'HN', '6G'):
    print 'MPP6R-09RXG-2H%sMT-%sK%sM9-V%sC8R' % perm

【讨论】:

    【解决方案3】:

    另一种生成组合的方法

    >>> ['MPP6R-09RXG-2H%sMT-%sK%sM9-V%sC8R' % (a, b, c, d)
    ...  for a in '8B' for b in 'B8' for c in 'HN' for d in '6G']
    ['MPP6R-09RXG-2H8MT-BKHM9-V6C8R',
     'MPP6R-09RXG-2H8MT-BKHM9-VGC8R',
     'MPP6R-09RXG-2H8MT-BKNM9-V6C8R',
     'MPP6R-09RXG-2H8MT-BKNM9-VGC8R',
     'MPP6R-09RXG-2H8MT-8KHM9-V6C8R',
     'MPP6R-09RXG-2H8MT-8KHM9-VGC8R',
     'MPP6R-09RXG-2H8MT-8KNM9-V6C8R',
     'MPP6R-09RXG-2H8MT-8KNM9-VGC8R',
     'MPP6R-09RXG-2HBMT-BKHM9-V6C8R',
     'MPP6R-09RXG-2HBMT-BKHM9-VGC8R',
     'MPP6R-09RXG-2HBMT-BKNM9-V6C8R',
     'MPP6R-09RXG-2HBMT-BKNM9-VGC8R',
     'MPP6R-09RXG-2HBMT-8KHM9-V6C8R',
     'MPP6R-09RXG-2HBMT-8KHM9-VGC8R',
     'MPP6R-09RXG-2HBMT-8KNM9-V6C8R',
     'MPP6R-09RXG-2HBMT-8KNM9-VGC8R']
    >>> 
    

    【讨论】:

      【解决方案4】:

      同时使用itertools和functools怎么样?

      >>> from operator import mod
      >>> from functools import partial
      >>> from itertools import product
      >>> map(partial(mod, 'MPP6R-09RXG-2H%sMT-%sK%sM9-V%sC8R'), product('8B', 'B8', 'HN', '6G'))
      ['MPP6R-09RXG-2H8MT-BKHM9-V6C8R', 'MPP6R-09RXG-2H8MT-BKHM9-VGC8R', 'MPP6R-09RXG-2H8MT-BKNM9-V6C8R', 'MPP6R-09RXG-2H8MT-BKNM9-VGC8R', 'MPP6R-09RXG-2H8MT-8KHM9-V6C8R', 'MPP6R-09RXG-2H8MT-8KHM9-VGC8R', 'MPP6R-09RXG-2H8MT-8KNM9-V6C8R', 'MPP6R-09RXG-2H8MT-8KNM9-VGC8R', 'MPP6R-09RXG-2HBMT-BKHM9-V6C8R', 'MPP6R-09RXG-2HBMT-BKHM9-VGC8R', 'MPP6R-09RXG-2HBMT-BKNM9-V6C8R', 'MPP6R-09RXG-2HBMT-BKNM9-VGC8R', 'MPP6R-09RXG-2HBMT-8KHM9-V6C8R', 'MPP6R-09RXG-2HBMT-8KHM9-VGC8R', 'MPP6R-09RXG-2HBMT-8KNM9-V6C8R', 'MPP6R-09RXG-2HBMT-8KNM9-VGC8R']
      

      【讨论】:

      • 不错!我从来没有想过你也可以使用 operator.mod 来进行字符串格式化。
      • @MartijnPieters partial 在使用format 时不是必需的,因为在没有*args**kwargs 的情况下调用它不会改变任何内容。使用format 时,您不能直接传递元组,但需要先将其转换为参数:map(lambda args: 'MPP6R-09RXG-2H{}MT-{}K{}M9-V{}C8R'.format(*args), product('8B', 'B8', 'HN', '6G'))。出于情感原因,我仍然大量使用旧的% 字符串格式。我真的应该考虑更频繁地使用format 函数。
      • 是的,不知何故,我将参数应用为*args。我的错。
      【解决方案5】:

      http://www.magicaljellybean.com/keyfinder/

      Magical Jelly Bean Keyfinder 是一款免费软件实用程序,可检索用于从注册表安装 Windows 的产品密钥(cd 密钥)。它还有一个社区更新的配置文件,用于检索许多其他应用程序的产品密钥。

      只需在您想要密钥的安装上运行它。

      【讨论】:

      • 不幸的是,安装在笔记本电脑上的 Windows 没有使用笔记本电脑底部的许可证密钥,而是使用某种公司的音量密钥安装的。 Microsoft 不允许使用这些代码来验证 Windows 升级。
      【解决方案6】:

      如果您直接在 Windows 7 中使用 Windows Anytime Upgrade 选项,则无需知道许可证密钥是什么。

      只要操作系统被激活,Windows 8 就会覆盖现有操作系统,并将 Windows 7 中的所有内容放入“Windows-old”文件夹中,除非您需要文件或其他内容,否则您可以删除该文件夹。

      Windows 升级过程会寻找激活的 Windows 操作系统,即使 Windows XP 也会这样做,只要它在安装升级之前被激活。

      通过随时升级购买时,您将通过电子邮件收到 Windows 8 许可证密钥。如果您从商店购买升级,您将获得许可证密钥和下载URL,或者您只需将密钥插入 Windows Anytime Upgrade,它就会自行下载和安装。

      【讨论】:

      • 正确,但在发布此代码时,“Windows 升级优惠”需要此代码。对于那些想使用 COA 上的代码重新安装 Windows 并且不再拥有制造商的还原分区的人,此过程也很有用。
      猜你喜欢
      • 2010-09-20
      • 2018-09-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2016-04-11
      • 2011-12-07
      • 1970-01-01
      相关资源
      最近更新 更多