1

我正在尝试为密码分析本地搜索实现粒子群优化算法,以找到简单替换密码的密钥。

我了解这种方法如何工作的理论并且已经实现了大部分算法,但我就是不知道如何计算速度。

粒子类:

public class Particle extends Alphabet {
    public Vector velocity = new Vector();
    public char[] pbest;

    public Particle() {
        this.Scramble();
    }

    public char[] getPosition() {
        return this.getAlphabet();
    }
}

群体类:

public class ParticleSwarm {
    public List<Particle> swarm = new ArrayList<>();
    private Fitness fitness = new Fitness();

    public void randomSwarm(int swarmSize) {
        for(int i = 0; i < swarmSize; i++) {
            swarm.add(new Particle());
        }
    }

    public Particle getBestParticle() {
        Particle swarmBest = new Particle();
        double bestScore = 0;
        for(int i = 0; i < swarm.size(); i++) {
            double newScore = fitness.score(swarm.get(i).getPosition());
            if(newScore >= bestScore) {
                bestScore = newScore;
                swarmBest = swarm.get(i);
            }
        }
        return swarmBest;
    }
}

粒子是我为另一种算法制作的字母类的扩展,本质上是 26 个可以打乱的字母组成的 char 数组。粒子的“位置”(据我所知,它只是它的字母表,或者它的一些数字表示)。

swarm 类很容易解释,但包括一个适应度类,它给粒子评分在 0 到 1 之间(1 是最好的),代表键产生的英文文本的数量。

我遇到了这个算法的实现(虽然没有代码)找到建议这些步骤的 vigenere 密码的密钥:

用于查找实际密钥的建议算法

  1. PSO 搜索算法参数的初始化

PSO 参数在第一步中设置。这些参数包括粒子数 (Np)、密钥大小 (Nd)、最大迭代次数 (Nt)、自信心因子 (C1)、Swarm 置信因子 (C2) 和惯性权重 (w)。

  1. 离散鸟类或种群的初始化

a) 对于 vigenere 密码的密码分析:粒子的初始位置通过随机选择大小 Nd 的排列来确定,从整数 0 到 25 随机均匀采样。 b) 使用以下方法初始化每个粒子的速度:

vi = vmin+(vmax - vmin) × rand 

其中:vi 是粒子 i 的速度 vmax 是最大速度,vmin 是最小速度,rand 是 0 到 1 之间的随机数。

  1. 项目清单

计算每个粒子的适应度函数值

a) 以粒子的位置为密钥解密密文。b) 求步骤 3 (a) 中得到的文本的适应度函数值。

  1. 更新粒子的速度和位置

计算步骤 3 中讨论的每个粒子的适应度函数值。

我似乎无法将公式粘贴到此处,但可以在此处的第 426 页上看到:http ://www.enggjournals.com/ijcse/doc/IJCSE13-05-05-064.pdf

4

1 回答 1

0

对于将来看到这个的任何人,这是我最终所做的:

由于单字母替换密码的密钥必须包含所有 26 个字母并且不能重复,因此要正确实施速度很棘手。相反,(这是否是最好的解决方案是另一回事)我取了 0 和 1 之间的 2 个数字 - 一个群体信心和一个自信 - 并将i遍历数组中的每 26 个字母。如果随机数介于 0 和群体置信度之间,它将是索引i处的字母群中最好的密钥。如果该数字大于群体信心但小于或等于自信心,则将重复相同的过程,但使用个人最佳密钥代替。如果这两个条件都不满足,则将保留索引 i 处的字母,然后删除所有重复项。到目前为止,这已经给我带来了一些不错的结果。

于 2014-03-10T10:26:52.143 回答