html隐写术,使用摩尔兹电码/莫尔兹电码存储信息 水波纹样式 Morse code

html水波纹样式,源码直接下载,代码有注释教程,小白可以看懂。

动画啥的都做好了,效果我觉得还不错

网上文章看到xbox 工程师使用隐写术,在界面的右下角放上了含有用户激活码的水波纹样式,一般人还真看不出来。

于是仿制了一个

先把莫尔兹转码部分放上来吧,莫尔兹转换部分是网上某位大佬写的,照抄。

完整代码下载在最后边

var utils = utils || {};

utils.isArray = function(value) {
    return Object.prototype.toString.apply(value) === ‘[object Array]‘;
}

utils.trim = function(value) {
    return value.trim ? value.trim() : value.replace(/^\s+|\s+$|/g,‘‘);
}

// 解决IE不兼容console问题
var console = console || {};
console.log = console.log || function(){};
console.error = console.error || function(){};

// 使用字典存储摩斯码对照关系
function Dictionary() {
    this.datasource = {};
    this.rdatasource = {};
}

Dictionary.prototype.add = function(keys, values) {
    if(typeof keys === ‘undefined‘ || typeof values === ‘undefined‘) {
        console.error(‘Illegal arguments‘);
        return ;
    }
    if(utils.isArray(keys) && utils.isArray(values)) {
        if(keys.length != values.length) {
            console.error(‘keys length not equals values length‘);
            return ;
        }
        for(var i = 0; i < keys.length; i++) {
            this.datasource[keys[i]] = values[i];
        }
        return ;
    }
    this.datasource[keys] = values;
}

Dictionary.prototype.reversal = function(){
    var tempData = this.datasource;
    for(var i in tempData) {
        if(tempData.hasOwnProperty(i)) {
            this.rdatasource[tempData[i]] = i;
        }
    }
}

Dictionary.prototype.showAll = function(values) {
    var count = 0;
    console.log(‘-----------morse code mapping-----------‘);
    for(var i in values) {
        if(values.hasOwnProperty(i)) {
            count++;
            console.log(i + ‘\t > ‘ + values[i]);
        }
    }
    console.log(‘total count: ‘ + count);
}

// morse code library
var morse = (function(global){
    var mcode = {},
        r_special = /\<\w+\>/g,
        r_find = /^\<(\w+)\>$/;

    // store datas mapping
    mcode.mdatas = (function(){
        var dictionaryDS = new Dictionary();
        // initial mappping
        dictionaryDS.add(
            [
                ‘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‘,
                ‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘0‘,
                ‘AA‘,‘AR‘,‘AS‘,‘BK‘,‘BT‘,‘CT‘,‘SK‘,‘SOS‘,
                ‘.‘,‘:‘,‘,‘,‘;‘,‘?‘,‘=‘,"‘",‘/‘,‘!‘,‘-‘,‘_‘,‘"‘,‘(‘,‘)‘,‘$‘,‘&‘,‘@‘,‘+‘
            ],
            [
                // letter
                ‘.-‘,‘-...‘,‘-.-.‘,‘-..‘,‘.‘,‘..-.‘,‘--.‘,‘....‘,‘..‘,‘.---‘,‘-.-‘,‘.-..‘,‘--‘,‘-.‘,‘---‘,‘.--.‘,‘--.-‘,‘.-.‘,‘...‘,‘-‘,‘..-‘,‘...-‘,‘.--‘,‘-..-‘,‘-.--‘,‘--..‘,
                // number
                ‘.----‘,‘..---‘,‘...--‘,‘....-‘,‘.....‘,‘-....‘,‘--...‘,‘---..‘,‘----.‘,‘-----‘,
                // special charactor
                ‘.-.-‘,‘.-.-.‘,‘.-...‘,‘-...-.-‘,‘-...-‘,‘-.-.-‘,‘...-.-‘,‘...---...‘,
                // punctuation
                ‘.-.-.-‘,‘---...‘,‘--..--‘,‘-.-.-.‘,‘..--..‘,‘-...-‘,‘.----.‘,‘-..-.‘,‘-.-.--‘,‘-....-‘,‘..--.-‘,‘.-..-.‘,‘-.--.‘,‘-.--.-‘,‘...-..-‘,‘.-...‘,‘.--.-.‘,‘.-.-.‘
            ]
        );
        return dictionaryDS;
    }());

    // error flag
    mcode.error_flag = false;

    // 将字符串转换为摩斯码
    mcode.parse = function(values) {
        // console.log(‘input: ‘ + values);
        this.error_flag = false;

        var _datasource = this.mdatas.datasource,
            item = ‘‘,
            a_special = [],
            a_temp = [],
            a_value = [],
            count = 0,
            result = ‘‘;
        values = values.toUpperCase();
        a_special = values.match(r_special);
        a_temp = values.split(r_special);

        // 将用户输入的字符串转换成数组
        for(var i=0; i<a_temp.length; i++) {
            item = a_temp[i];
            if(item !== ‘‘) {
                // IE无法通过下标来索引字符串
                if(!item[0]){
                    item = item.split(‘‘);
                }
                for(var j=0; j<item.length; j++) {
                    a_value[count++] = item[j];
                }
            }

            // 当前字符串为<AS>形式,提取AS字符
            if(i !== a_temp.length - 1){
                a_value[count++] = a_special[i].match(r_find)[1];
            }
        }

        // 将解析数组形式的用户输入值
        for(var i=0; i<a_value.length; i++) {
            item = a_value[i];

            if(item === ‘ ‘) {
                result += ‘/ ‘;
            } else if(typeof _datasource[item] === ‘undefined‘) {
                this.error_flag = true;
                // console.error(‘Invalid characters in input.‘)
                result += ‘? ‘;
            }else {
                result += _datasource[item] + ‘ ‘;
            }
        }
        return utils.trim(result);
    }

    //将摩斯码转换成字符串
    mcode.decode = function(values) {
        // console.log(‘input: ‘ + values);
        this.error_flag = false;

        this.mdatas.reversal();
        var _rdatasource = this.mdatas.rdatasource,
            a_input = values.split(‘ ‘),
            result = ‘‘,
            item = ‘‘,
            c_result = ‘‘;

        for(var i=0; i<a_input.length; i++) {
            item = a_input[i];
            if(item === ‘/‘) {
                result += ‘ ‘;
            }else {
                c_result = _rdatasource[item];
                if(typeof c_result === ‘undefined‘) {
                    this.error_flag = true;
                    // console.error(‘Invalid characters in input.‘)
                    result += ‘?‘;
                } else {
                    if(c_result.length > 1){
                        result += ‘<‘ + c_result + ‘>‘;
                    } else {
                        result += c_result;
                    }
                }
            }
        }
        return result;
    }

    return mcode;
}(this));

百度云下载

链接:https://pan.baidu.com/s/1za3NLi8a7ebJuEExb10HdA
提取码:hsv5

原文地址:https://www.cnblogs.com/iStu/p/10291725.html

时间: 2024-10-01 01:07:27

html隐写术,使用摩尔兹电码/莫尔兹电码存储信息 水波纹样式 Morse code的相关文章

摩尔斯电码(Morse Code)Csharp实现

摩尔斯电码,在早期的"生产斗争"生活中,扮演了很重要的角色,作为一种信息编码标准,摩尔斯电码拥有其他编码方案无法超越的长久生命.摩尔斯电码在海事通讯中被作为国际标准一直使用到1999年.不过随着科技的发展,最终还是倒在了历史的车轮下(PS:等等,为何这么熟悉??观众:好一片根正苗红的*文啊,啊啊啊啊),1997年,当法国海军停止使用摩尔斯电码时,发送的最后一条消息是:“所有人注意,这是我们在永远沉寂之前最后的一声呐喊!”. 任何关于Morse code可拓展的咨询,请移步维基百科:摩尔

Leetcode 804. Unique Morse Code Words 莫尔斯电码重复问题

参考:https://blog.csdn.net/yuweiming70/article/details/79684433 题目描述: International Morse Code defines a standard encoding where each letter is mapped to a series of dots and dashes, as follows: "a" maps to ".-", "b" maps to &q

拽兹注酌兹紫拽兹注酌兹紫utxdfu拽兹注酌兹紫

桩走滋驻专资足最拽酌紫撰祖拽捉琢着咨邹谞滋资转纵左祝转嘴装追邹子最尊做鬃淄座坐祖兹佐座淄谆子奏棕谆揍抓孜庄钻做酌驻柞子罪嘴柞鬃尊奏柞注鬃组祝尊柞捉撞淄座租子嘴左卓组桩抓谞昨最庄装驻奏转妆嘴篆子走阻坐状子住椎住租转卓足棕资滋昨籽宗坠祖籽赚鬃邹琢锥钻纵租桌砖坠罪卓砖字缀拙钻宗奏子阻佐姿纵兹追做赚奏纂拙遵坐字宗浊装卒祝罪锥总坠淄综尊孜啄着滋缀姿赚邹嘴棕姿字渍装揍酌罪棕足籽祝籽拽滋鬃纂桌酌昨桩柞锥族鬃阻壮淄足综妆追邹琢鬃滋纵字字揍邹邹撞子咨祖驻座棕状砖纂状椎纂自酌卒资琢坠鬃自锥谆遵柞邹籽踪鬃啄紫字壮坠专

一些简单的编程练习题

转载自 http://blog.jobbole.com/53039/ 每当成为入门CS课程(学生们学习编程语言的课程)的助教时,都困于提出好的练习题.Project Euler和类似的问题通常对初学者来说来难了,尤其是对于那些没有很强数学背景的同学. 在这篇文章中,Adrian Neumann 收集了一些从初级到高级逐级困难的练习题,适合刚开始学习编程的初学者.当有新的练习题时,Adrian 会及时添加.除了一些GUI问题外,练习题一般都是算法题,无需学习任何库就可以解决.课程练习题的困难程度有

Steganography-图片隐写术

Steganography-图片隐写术 今天做DAM的作业,做到图片水印的时候,想起来当初小调同学把言页之庭的种子通过图片发给我.看到下面这个新闻真是觉得碉堡了!!技术宅又一次可以成功而隐晦的表白了!!哈哈哈!! http://war.163.com/10/0712/17/6BDLNUB90001123L.html 下面分享以下自己用python实现的隐写术,后面如果有时间会再更深入研究一下解码的问题!! 基本思路是: 1.每张图片都有RGB三个通道,每个像素点的值为3个8位的R/G/B值. 2

英语姓氏

英语姓名的一般结构为:教名+自取名+姓.如 William Jafferson Clinton.但在很多场合中间名往往略去不写,如 George Bush,而且许多人更喜欢用昵称取代正式教名,如 Bill Clinton.上述教名和中间名又称个人名.现将英语民族的个人名.昵称和姓氏介绍如下:I. 个人名字 按照英语民族的习俗,一般在婴儿接受洗礼的时候,由牧师或父母亲朋为其取名,称为教名.以后本人可以在取用第二个名字,排在教名之后.英语个人名的来源大致有以下几种情况:1. 采用圣经.希腊罗马神话.

矩阵与行列式的几何意义

作者:童哲链接:https://www.zhihu.com/question/36966326/answer/70687817来源:知乎著作权归作者所有,转载请联系作者获得授权. 行列式这个“怪物”定义初看很奇怪,一堆逆序数什么的让人不免觉得恐惧,但其实它是有实际得不能更实际的物理意义的,理解只需要三步.这酸爽~ 1,行列式是针对一个的矩阵而言的.表示一个维空间到维空间的线性变换.那么什么是线性变换呢?无非是一个压缩或拉伸啊.假想原来空间中有一个维的立方体(随便什么形状),其中立方体内的每一个点

CTF中那些脑洞大开的编码和加密

0x00 前言 正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问题:表哥,你知道这是什么加密吗?其实CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但是会给留一些线索,所以写此文的目的是想给小伙伴做题时给一些参考,当然常在CTF里出现的编码也可以了解一下.本来是想尽快写出参考的文章,无奈期间被各种事情耽搁导致文章断断续续写了2个月,文章肯定有许多没有提及到,欢迎小伙伴补充,总之,希望对小伙伴们有帮助吧! 0x01 目录 1 2 3

IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

转自:http://blog.csdn.net/zhibudefeng/article/details/8463268 [cpp] view plain copy // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { CGC