首页
社区
课程
招聘
[旧帖] 求一加密算法,哪位大神能解决 0.00雪花
发表于: 2015-6-4 21:34 3869

[旧帖] 求一加密算法,哪位大神能解决 0.00雪花

2015-6-4 21:34
3869
php加密解密函数,15位以内数字加密成小于等于10位长度数字(或越短越好)

1、加密字符串为纯数字,长度为 小于等于 16位。
2、加密KEY可以选字母、数字、混合任选,长度为8位。
3、加密结果数据为纯数字,加密结果长度小于等于10位。

写出加密,解密函数。
加密后数据不可更改任何一位数,否则解密不出结果。
function enc(stirng str, string key)
{ return 结果;}
function dec(string str,string key)
{ return 结果;}
string str = enc("123456789912","12345678");
string dec = enc(str,"12345678");

php或其它代码编写。

各位大神支招吧!金币悬赏 ,欢迎交流,qq: 9961684@qq.com

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
加密?原集合与加密集合一样大,你还想压缩再加校验位?你是不是想太多了
是不是弄一张表,多个字符转成一个字符以后加密?
2015-6-5 09:09
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1、加密后的数据长度不会小于数据加密前的长度。
2、如果想减少数据长度,可以考虑压缩算法。可压缩算法的实现原理是对重复数据实现压缩,有可能压缩后的数据大小还大于原来的数据大小。
而你要加密的原始长度小于16字节,这种想法是实现不了的。
2015-6-5 09:47
0
雪    币: 296
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还要缩长度。。要么减少信息熵,要么压缩数据位,可以做,但考虑到加密安全性就复杂了
给你一种简单的思路吧,因为你的密码是纯数字,也就是0~9,
一个字符长度是8bit,其实用4个bit就可以表示0-15或-8~7,所以如果将0-9映射到这个范围内
那么一个字符是可以存储两个数字的。
至于映射嘛,可以给你推荐异或公式,如果以个位数字进行异或,是可以达到集中映射的效果的,比如0~9与5异或的集合就是{5,4,7,6,1,0,3,2,-5,-4},而且异或翻转特性也不错,这个新集合再和5异或就还原了
至于加密部分,个人觉得看需求吧,难的我也不会,简单的估计你也不需要,就不献丑了

另外如果觉得有参考价值能赏个15kx么,还没转正呢嘿嘿,挂机好难挂啊
2015-6-5 10:46
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢你的回复
2015-6-5 11:10
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢你的回复,但现在是问题没解决,也不知如何下手,朋友能解决吗?
2015-6-5 11:13
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
或都哪位能写出  小于等原串长度也行
2015-6-5 11:14
0
雪    币: 296
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我只是没做加密而已,但是如果能控制加密结果也是0~9的数字范围的话,长度是可以减少一半的,也就说加密后的上限是10个字符,那么可以存储20个数字
2015-6-5 11:18
0
雪    币: 296
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
另外考虑到你的密钥是8个字符,你可以考虑使用对称加密算法,那么就是将待加密明文补齐到8个字、16个字然后将AES之类的算法精简一下就行了
2015-6-5 11:23
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
把数据弄到位域里面高4位第4位,首先第一个4位是长度编码,按你要求,还要进行有效性验证,所以最后还要加几位,所以15长度密码,最小编码长度9字节,再加密,但是加密完成以后数据不一定是可打印字符,所以这时候就要进行base64或者其他的编码进行可打印字符编码,这时候字符量又加长到了至少9*8/7>10字符,如果非要显示为数字会更加长,所以按要求10个数字编码不可能,除非你算好所有密码某个中间值,查数据库。
2015-6-5 11:42
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我对加密这块不了解,写出的函数很容易看透,达不到加密效果, 能否有朋友可以代写出来, 高分悬赏  ,或QQ私聊 99-61-684
2015-6-5 11:55
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
5000Kx 悬赏

我对加密这块不了解,写出的函数很容易看透,达不到加密效果, 能否有朋友可以代写出来, 高分悬赏  ,或QQ私聊 99-61-684
2015-6-5 11:57
0
雪    币: 124
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不懂帮顶
2015-6-15 00:23
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
14
不可能实现的。
这个帖的要求比楼主另一个帖“如何加密数字后让结果变短?”更加苛刻。

只需要记住一点,加密与解密中,输入与输出是一一对应的!或者说,输入数据空间与输出数据空间存在某种相互映射。

我们把问题简化一下:0~99共100个数,加密后只能用0~9这10个数来表示。
按“一一对应”的映射原则,可以设计一种算法来保证从100个数中按某种“规则”挑选10个数作为输入(明文),经过变换(加密)成为输出(密文);解密时走这个逆过程就好了。这肯定没有问题。

现在的命题是:这100个数全部都要用10个数来表示,这显然实现不了!

用个可能不太恰当的故事来讲这个问题,可能比空间映射更好理解。

在世界末日,地球即将毁灭,人类历经浩劫,仅存100个地球人。幸运的是,我们有“诺亚方舟”号飞船可以搭载10个人,到其他适于生命生存的星球重建家园。
我佛大慈大悲,欲普渡众生,希望100个人都能挤上飞船。但上帝造物,飞船仅允许10名乘客。
怎么办!?只能按上帝的意志从100个人中挑选出10个人,去为我们创造新世界。
2015-6-15 12:18
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
100,00Kx 悬赏求写一函数,达到加密、解密即可。

欢迎大神交流,QQ: 99-61-684

请备注说明。
2015-6-16 21:58
0
游客
登录 | 注册 方可回帖
返回
//