字符串加密

原创 2015年11月18日 18:39:57

说明
有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余几个丢弃。现在,修改过的那个单词死于字母表的下面,如下所示:
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
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙,Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH。
请实现下述接口,通过指定的密匙和明文得到密文。

直接来代码

/**
     * 
     * @param key 密匙
     * @param data 明文
     * @return 密文
     */
    public String encrypt(String key, String data) {
        List<Character> charlist = new ArrayList<Character>();
        String miyao = key.toUpperCase();
        int length = miyao.length();
        for (int i = 0; i < length; i++) {
            char ch = miyao.charAt(i);
            if (charlist.isEmpty() || !(charlist.contains(ch))) {
                charlist.add(ch);
            }
        }
        for (int k = 'A'; k <= 'Z'; k++) {
            if (!(charlist.contains((char) k))) {
                charlist.add((char) k);
            }
        }
        StringBuffer sb = new StringBuffer();
        Iterator in = charlist.iterator();
        while (in.hasNext()) {
            sb.append(in.next());
        }
        Map<Character, Character> resmap = this.getMap(sb.toString());
        StringBuffer res = new StringBuffer();
        String inputstr = data.toUpperCase();
        for (int m = 0; m < inputstr.length(); m++) {
            char data_char = data.charAt(m);
            char input_char = inputstr.charAt(m);
            if (data_char >= 'a' && data_char <= 'z') {
                char res_char = resmap.get(input_char);
                res.append((char) (res_char + ('a' - 'A')));
            } else if (data_char >= 'A' && data_char <= 'Z') {
                char res_char = resmap.get(input_char);
                res.append(res_char);
            } else {
                res.append(data_char);
            }
        }
        return res.toString();
    }

    public Map<Character, Character> getMap(String str) {
        Map<Character, Character> map = new HashMap<Character, Character>();
        int length = str.length();
        char start_char = 'A';
        int count = 0;
        for (int i = 0; i < length; i++) {
            char ch = str.charAt(i);
            map.put((char) (start_char + count), ch);
            count++;
        }
        return map;
    }

zzuli OJ 1077: 字符串加密

Description 输入一串字符(长度不超过100)和一个正整数k,将其中的英文字母加密并输出加密后的字符串,非英文字母不变。加密思想:将每个字母c加一个序数k,即用它后面的第k个字母代替,...
  • sinat_25926481
  • sinat_25926481
  • 2015年08月29日 12:28
  • 5386

[华为OJ] 字符串加密

思路: 这道题目最难的地方在题意的理解,尤其是密匙是如何生成的,将拗口的密匙生成过程说明如下,分为两个步骤: 1.对密匙进行去重; 2.对密匙根据字母表剩余字母进行补齐,保证最后的密匙一定是26...
  • u014730658
  • u014730658
  • 2016年07月09日 23:36
  • 241

字符串的加密与解密

一、JavaScript预定义编码与解码方法 字符串常规编码与解码——escape()和unescape()       var str = 'HTML5 Free自由者...
  • huangyibin628
  • huangyibin628
  • 2014年05月01日 23:44
  • 1680

字符串加密问题

字符串加密问题 题目描述:任意给定一个正整数(不超过32位),依据如下规则对其进行加密处理: 1. 不小于60000的整数的密文为其本身 2. 对于小于60000的整数,密文生成方式如下:...
  • yfy236
  • yfy236
  • 2016年09月01日 21:20
  • 343

Python中的如何给一个字符串加密

Python中自带的hashlib模块的功能是给字符串进行加密,加密方式有以下几种: md5、sha1、sh224、sha256、sha384、sha512 常用的是md5和sha1 这里首先介...
  • Beyond_F4
  • Beyond_F4
  • 2017年11月14日 21:01
  • 333

C#字符串加密

首先来看一下我们试卷上的题目。 1)从A.txt文本文件中按照行读字符串,进行加密。吧加密后的字符串写到B.txt文件中。...
  • u012706792
  • u012706792
  • 2015年12月14日 19:43
  • 6780

Android实现DES对字符串加密

import java.io.UnsupportedEncodingException;    import java.security.SecureRandom;    import j...
  • jiankeufo
  • jiankeufo
  • 2015年02月10日 17:59
  • 932

怎样对字符串进行加密/解密

作者:John_Sheridan [译者的话] 该文介绍了一种直接调用 CryptoAPI 函数对字符串进行加密和解密的用法,非常简单、实用。其中,有作者所封装的一个加密/解密类,是可以直接复用的源码...
  • no_frost
  • no_frost
  • 2005年03月06日 13:02
  • 2214

数据库连接字符串加密

在项目开发中,将自己的系统提高自己系统的安全性能!
  • happyniceyq
  • happyniceyq
  • 2016年08月21日 22:12
  • 1099

app.config数据库连接字符串的加密

一直都想对app.config下的数据库连接字符串进行加密,因为程序直接调用数据集的时候必需要调用app.config(程序编译后会自动更名为程序文件名.config),如果数据库连接字符串以明文方式...
  • lv111zy
  • lv111zy
  • 2014年07月02日 15:04
  • 933
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串加密
举报原因:
原因补充:

(最多只允许输入30个字)