希尔密码加密解密

这个我是从百科中看到的,但是有些地方看不懂,在查阅资料后,进行了修改,希望对大家有帮助
加密
例如:密钥(密码学中好象没有密匙一词)矩阵
    1 3
    0 2

  这个是加密的密钥
明文:HI THERE
去空格,2个字母一组,根据字母表顺序(如a就是1)换成矩阵数值如下,末尾的E为填充字元:
HI TH ER EE
8   20  5   5
9    8  18  5
HI 经过矩阵运算转换为 IS,具体算法参考下面的说明(mod是求余运算符):
|1 3| 8 :1*8+3*9=35 MOD26=9 =I
|0 2| 9 :0*8+2*9=18 MOD26=18=R
用同样的方法把“HI THERE”转换为密文“IR RPGJTJ”,注意明文中的两个E分别变为密文中的G和T。
解密
解密时,必须先算出密钥的逆矩阵,然后再根据加密的过程做逆运算。
逆矩阵算法公式:(与线性代数有关)

例如密钥矩阵=
        |1 7|
        |0 3|
AD-BC=1*3-0*7=3 3*X=1 mod26 所以 X=9
因此
|    1      7    |             |  3     -7   |

|       |   的逆矩阵为:9 *    |               |
|    0      3    |                         |   0     1    |
假设密文为“FOAOESWO”
FO AO ES  WO
6     1   5   23
15  15  19  15
9* |3 -7|   6= 9*(3*6-7*15)=-783 mod26 = 23=W
  |0 1|  15 = 9*(0*6+1*15)= 135 mod26 = 5 =E
所以密文“FOAOESWO”的明文为“WEREDONE”

时间: 2024-10-02 05:49:04

希尔密码加密解密的相关文章

常用密码加密解密操作相关类

/// <summary> /// 密码加密解密操作相关类 /// </summary> public static class EncryptHelper { #region MD5 加密 /// <summary> /// MD5加密 /// </summary> public static string Md532(this string source) { if (string.IsNullOrEmpty(source)) return null;

凯撒密码加密解密--JAVA实现(基础)

凯撒密码一种代换密码,据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码.凯撒密码的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文. 使用JAVA程序实现对明文的加密: package com.qikeyishu.www; public class Kaisapwd { public static void main(String[] args) { char str[]={'a','b'

Openfire用户密码加密解密

需求要求审核过程中都用匿名进行用户注册登录,注册用户审核通过后才使用openfire内置表 如何做到用户密码统一 Openfire是通过org.jivesoftware.util.Blowfish.java实现的加密. 密钥:在openfire的数据库中有表ofproperty,其中就有passwordKey的值 Blowfish blow=new Blowfish(passwordKey); //加密 String encrypt=blow.encryptString("123");

vue 登录 + 记住密码 + 密码加密解密

<template> <el-form :model="ruleForm"> <h3 class="title">系统登录</h3> <el-form-item prop="mobile"> <el-input type="text" v-model="ruleForm.mobile" auto-complete="off"

数据库密码加密公用秘要生成器,数据库密码加密解密入口

public class Encryptor { public static final String HUNDSUN_VERSION="@system 管理平台 @version 2.0.1 @lastModiDate @describe "; protected static final int BLOCK_SIZE = 8; private int[] workingKey = null; private byte[] userkey = null; /** * standard

仿射密码加密解密文件流

#include<iostream> #include<string> #include<fstream> #include<Windows.h> using namespace std; class PWoper { string inpatch; string outpatch; public: PWoper(string in, string out) { inpatch = in; outpatch = out; } void encrypt() {

Druid密码加密

pom里引用: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> 加密解密示例: import com.alibaba.druid.filter.config.ConfigTools; publ

C#:使用MD5对用户密码加密与解密

C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1)16位的MD5加密 /// <summary> /// 16位MD5加密 /// </summary> /// <param name="password"></param> /// <returns></returns&

Java密码加密与解密

Java密码加密与解密 Java中对代码进行加密与解密,其中用MD5方式的是不可逆的.   import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import