码迷,mamicode.com
首页 > 系统相关 > 详细

Machine Learning for hackers读书笔记(七)优化:密码破译

时间:2015-11-08 17:43:19      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

#凯撒密码:将每一个字母替换为字母表中下一位字母,比如a变成b。

english.letters <- c(‘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‘) 

caesar.cipher <- list() 

inverse.caesar.cipher <- list() 

#加密LIST和解密LIST

for (index in 1:length(english.letters))

{

  caesar.cipher[[english.letters[index]]] <- english.letters[index %% 26 + 1]

  inverse.caesar.cipher[[english.letters[index %% 26 + 1]]] <- english.letters[index]

print(caesar.cipher) 

# 单字符串加密

apply.cipher.to.string <- function(string, cipher)

{

  output <- ‘‘ 

  for (i in 1:nchar(string))

  {

  output <- paste(output, cipher[[substr(string, i, i)]], sep = ‘‘)

  }  

  return(output)

}

 #向量字符串加密

apply.cipher.to.text <- function(text, cipher)

{

  output <- c()  

  for (string in text)

  {

    output <- c(output, apply.cipher.to.string(string, cipher))

  }  

  return(output)

}

apply.cipher.to.text(c(‘sample‘, ‘text‘), caesar.cipher)

#贪心优化:只有当新解密规则得到的解密串的概率变高时,才接受新的解密规则

#思路:

#1.如果解密规则B解密出的解密串的概率大于解密规则A对应的解密串,那么我们用B代替A

#2.如果解密规则B解密出的解密串的概率小于解密规则A对应的解密串,我们仍然有可能用B代替A,不过并不是每次都替换。

#如果解密规则B对应的解密串的概率是p1,解密规则A对应的解密串的概率是p2,以p1/p2的概率从解密规则A替换到解密规则B(表示有一定的概率接受B,这使得不会陷入贪心优化陷阱中)

 

Machine Learning for hackers读书笔记(七)优化:密码破译

标签:

原文地址:http://www.cnblogs.com/MarsMercury/p/4947603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!