精英盒子 -> 程序设计 -> 发个自写的加密算法【xywhEncry1】,国际安全性保证,标题要长,求破求虐! [打印本页]

xywhsoft 2012-01-30 03:00

发个自写的加密算法【xywhEncry1】,国际安全性保证,标题要长,求破求虐!

xywhEncry1 是一种RC4算法的改进版本
开发他的主要原因是我个人感觉RC4不够强力
所以加了一层伪随机计算,以及将128位密钥扩展到4096字节的密钥
使强度大大增加了,众所周知RC4出生三十多年至今
安全性都是十分卓越的,所以我这个算法安全性是绝对不会存在什么问题的

另外在运算优化方面,我经过数次优化[但仍有很大的优化余地]



程序已经更新,请关注第二页[24楼]

xywhsoft 2012-01-30 03:01
这个压缩包是7z格式的,不知道为啥现在的站长居然都不添加7z附件上传
批评一下

连7z都不加,如何崇尚开源……

xywhsoft 2012-01-30 03:02
  1. 源代码:



    Sub xywhEncry1(ByVal DataPtr As Any Ptr,ByVal DataSize As Integer,ByVal Paaword As ZString Ptr,ByVal PwSize As Integer)
        Dim SBox(1023) As Integer        ' S盒[用于密钥的二次混淆]
        Dim KBox(63) As Integer            ' K盒[用于密钥的一次混淆]
        Dim TPW(63) As Integer            ' 临时密码盒[密码填充于此]
        Dim PwInt As Integer                ' 二次混淆因子[用于S盒混淆的运算因子,取自K盒]
        Dim PwStep As Integer                ' 原始密码的步数[一步=4字节]
        Dim DtStep As Integer                ' 数据的计算步数
        Dim RAM As Any Ptr                    ' 临时内存
        Dim i As Integer                        ' 循环变量
        Dim TmpInt As Integer                ' 临时Int变量
        
        PwStep = PwSize \ 4                    ' 首先算出密码的步数[一步=4字节]
        If PwSize Mod 4 Then
            PwStep += 1
        EndIf
        
        RAM = Allocate(PwStep*4)        ' 将密码复制到临时容器中[为了末尾\0处理]
        CopyMemory(RAM,Paaword,PwSize)
        
        For i = 0 To 63                            ' 使用密码填满“密码容器”
            CopyMemory(@TPW(i),((i Mod PwStep) * 4) + RAM,4)
        Next
        #Ifdef DebugMode
            putfile(ExePath & "\Dump-TPW.txt",@TPW(0),0,256)
        #EndIf
        
        For i = 0 To 63                            ' 进行第一次对密钥的伪随机混淆[K盒混淆]
            Dim TB(1) As UShort
            CopyMemory(@TB(0),@TPW(i),4)
            TmpInt = (TmpInt + TB(0)) Mod 65536
            TB(0) = TmpInt
            TmpInt = (TmpInt + TB(1)) Mod 65536
            TB(1) = TmpInt
            CopyMemory(@KBox(i),@TB(0),4)
            PwInt = KBox(i) Xor TPW(i)    ' 为第二次密钥伪随机混淆采集因子
        Next
        #Ifdef DebugMode
            putfile(ExePath & "\Dump-KBox.txt",@KBox(0),0,256)
        #EndIf
        
        For i = 0 To 1023                            ' 进行第二次密钥混淆[S盒混淆]
            Dim TB(1) As UShort
            PwInt = PwInt Xor KBox(i Mod 64)
            CopyMemory(@TB(0),@PwInt,4)
            TmpInt = (TmpInt + TB(0)) Mod 65536
            TB(0) = TmpInt
            TmpInt = (TmpInt + TB(1)) Mod 65536
            TB(1) = TmpInt
            CopyMemory(@SBox(i),@TB(0),4)
        Next
        #Ifdef DebugMode
            PutFile(ExePath & "\Dump-SBox.txt",@SBox(0),0,4096)
        #EndIf
        
        DtStep = DataSize \ 4                    ' 准备加密使用的数据[四字节对其]
        If DataSize Mod 4 Then
            DtStep += 1
        EndIf
        Dim DataOut(DtStep) As Integer
        CopyMemory(@DataOut(0),DataPtr,DataSize)
        
        For i = 0 To DtStep-1                    ' 开始加密
            Dim TB(1) As UShort
            CopyMemory(@TB(0),@SBox(i Mod 1024),4)
            TmpInt = (TmpInt + TB(0)) Mod 65536
            TB(0) = TmpInt
            TmpInt = (TmpInt + TB(1)) Mod 65536
            TB(1) = TmpInt
            CopyMemory(@SBox(i Mod 1024),@TB(0),4)
            DataOut(i) = DataOut(i) Xor SBox(i Mod 1024)
        Next                                                    ' 回写结果
        CopyMemory(DataPtr,@DataOut(0),DataSize)
        #Ifdef DebugMode
            PutFile(ExePath & "\Dump-All.txt",@DataOut(0),0,DataSize)
        #EndIf
    End Sub


outman 2012-01-30 07:11
虽然一点都不懂,但是好像很厉害的样子

内容来自[手机版]

whtsky 2012-01-30 08:59
计算速度还是太快了

jybox 2012-01-30 12:36
对这方面没研究

phpwind默认就没7z,我一般都是用zip

whtsky 2012-01-30 12:40
第5楼jybox于2012-01-30 12:36发表的 Re:发个自写的加密算法【xywhEncry1】,国际安全性保证,标题要长,求破 .. 的帖子
[表情] 对这方面没研究
phpwind默认就没7z,我一般都是用zip
*nix应该是tar.gz主流吧…

jybox 2012-01-30 14:24
whtsky:*nix应该是tar.gz主流吧… (2012-01-30 12:40) 

看起来是的,很多发行版都不自带zip

scxyscxy 2012-01-30 14:57
马克,回家再看

jybox 2012-01-30 15:12
phpwave:RHEL都带ZIP
Linux操作系统下的zip
  Linux以完美的跨平台性能很好得兼容zip格式,在Windows下打包的zip格式文件,在Linux操作系统下可以使用zip命令来完成压缩,同样也可以使用unzip命令来解压文件。 .. (2012-01-30 14:52) 

你到底想说神马

whtsky 2012-01-30 15:13
jybox:你到底想说神马 (2012-01-30 15:12) 

释放优越感么。。

whtsky 2012-01-30 15:15
*nix主流是tar.gz,秀下限自粽

whtsky 2012-01-30 15:21
跨平台的话tar最好,秀下限自粽

whtsky 2012-01-30 15:24
windows不支持tar?呵呵
SB

whtsky 2012-01-30 15:27
phpwave:[表情]你自己试试
P.s:没第三方软件 (2012-01-30 15:26) 

非精简版系统自带tar。cab的解压缩的。

whtsky 2012-01-30 16:10
phpwave:我的WIN7,原版
[表情]有CAB,就是没tar
[表情]makecab.exe还是字符界面[表情]
 (2012-01-30 15:32) 


xywhsoft 2012-01-30 17:38
没办法继续编辑原帖子了,今天更新了一下,效率翻了十倍,但是加密的核心代码也有所改变,新的代码随后根楼贴出

xywhsoft 2012-01-30 17:39
没办法继续编辑原帖子了,今天更新了一下,效率翻了十倍,但是加密的核心代码也有所改变,新的代码随后根楼贴出


[attachment=250]




还是惯例,下载了该后缀到7z解压

xywhsoft 2012-01-30 17:41
  1. Sub xywhEncry1(ByVal DataPtr As Any Ptr,ByVal DataSize As Integer,ByVal Paaword As ZString Ptr,ByVal PwSize As Integer)
        Dim SBox(1023) As Integer        ' S盒[用于密钥的二次混淆]
        Dim KBox(63) As Integer            ' K盒[用于密钥的一次混淆]
        Dim TPW(63) As Integer            ' 临时密码盒[密码填充于此]
        Dim PwInt As Integer                ' 二次混淆因子[用于S盒混淆的运算因子,取自K盒]
        Dim PwStep As Integer                ' 原始密码的步数[一步=4字节]
        Dim DtStep As Integer                ' 数据的计算步数
        Dim RAM As Any Ptr                    ' 临时内存
        Dim i As Integer                        ' 循环变量
        Dim TmpInt As UInteger            ' 临时Int变量
        
        PwStep = (PwSize + 3) \ 4        ' 首先算出密码的步数[一步=4字节]
        RAM = Allocate(PwStep*4)        ' 将密码复制到临时容器中[为了末尾\0处理]
        CopyMemory(RAM,Paaword,PwSize)
        
        For i = 0 To 63                            ' 使用密码填满“密码容器”
            CopyMemory(@TPW(i),((i Mod PwStep) * 4) + RAM,4)
        Next
        
        For i = 0 To 63                            ' 进行第一次对密钥的伪随机混淆[K盒混淆]
            Dim TB(3) As UByte
            CopyMemory(@TB(0),@TPW(i),4)
            TmpInt = (TmpInt + TB(0)) And 255
            TB(0) = TmpInt
            TmpInt = (TmpInt + TB(1)) And 255
            TB(1) = TmpInt
            TmpInt = (TmpInt + TB(2)) And 255
            TB(2) = TmpInt
            TmpInt = (TmpInt + TB(3)) And 255
            TB(3) = TmpInt
            CopyMemory(@KBox(i),@TB(0),4)
            PwInt = KBox(i) Xor TPW(i)    ' 为第二次密钥伪随机混淆采集因子
        Next
        
        For i = 0 To 1023                            ' 进行第二次密钥混淆[S盒混淆]
            Dim TB(1) As UShort
            PwInt = PwInt Xor KBox(i And 63)
            CopyMemory(@TB(0),@PwInt,4)
            TmpInt = (TmpInt + TB(0)) And &HFFFF
            TB(0) = TmpInt
            TmpInt = (TmpInt + TB(1)) And &HFFFF
            TB(1) = TmpInt
            CopyMemory(@SBox(i),@TB(0),4)
        Next
        
        DtStep = (DataSize + 3) \ 4        ' 计算加密需要进行的次数[四字节对齐]
        Dim DataOut As Integer Ptr
        For i = 0 To DtStep-1                    ' 开始加密
            DataOut = DataPtr + (4 * i)
            SBox(i And 1023) += SBox((i+1) And 1023)
            *DataOut = *DataOut Xor SBox(i And 1023)
        Next
    End Sub



这一次更新,改变K盒混淆为8位,加密计算为32位[通过加密计算提升速度,用K盒精度增强安全性]

放出来的压缩包同时附带了 DLL 和 LIB 以及两者的使用范例

还有完整的源代码[在SDK目录]

优化后的代码,每秒加密的速度提升到了 535MB

xywhsoft 2012-01-30 17:49
附件改成zip格式了   - -

大了那么多

whtsky 2012-01-30 18:16

个人感觉,一个足够安全的加密算法要求要足够慢
如果算法快的话只要穷举就好了
也不能太慢,否则过度影响服务器效率
比较理想的值应该是家用电脑计算一个10位字符串速度在0.05~0.5s之间

whtsky 2012-01-30 18:17
网上那么多md5反算的根本原因就是MD5太快了
6位纯数字密码能在几秒钟之内攻破。。

whtsky 2012-01-30 18:26
phpwave:P4 HT表示要几个小时 (2012-01-30 18:22) 

你怎么不说286

xywhsoft 2012-01-30 18:30
whtsky:[表情]
个人感觉,一个足够安全的加密算法要求要足够慢
如果算法快的话只要穷举就好了
也不能太慢,否则过度影响服务器效率
比较理想的值应该是家用电脑计算一个10位字符串速度在0.05~0.5s之间 (2012-01-30 18:16) 

你所说的属于采样算法[也叫摘要算法]
是专用于短数据加密的密码,典型的就是MD5算法

我这种属于数据加密算法,是用于大型二进制数据加密的
并使用伪随机技术保证内容的不可破解性

并非同一种算法

whtsky 2012-01-30 18:31
=。=好吧请无视这楼

xywhsoft 2012-01-30 18:32
典型的应用就是一些自解压软件,使用摘要算法存储密码[也有很多软件为了足够的安全性,而干脆不保存密码]
然后使用数据加密算法对数据加密,嗯嗯,总之两者配合是很常见的

xywhsoft 2012-01-30 18:33
另外因为翻页了,所以申请主楼解锁,我编辑一下

whtsky 2012-01-30 18:35
xywhsoft:你所说的属于采样算法[也叫摘要算法]
是专用于短数据加密的密码,典型的就是MD5算法
我这种属于数据加密算法,是用于大型二进制数据加密的
....... (2012-01-30 18:30) 

抱歉,没仔细看
但加密速度快的话不也同样可以快速穷举出来么。。

xywhsoft 2012-01-30 18:39
啊……这就是为什么这类算法都吹嘘伪随机了
因为伪随机是一种使数据环环相扣的加密手段,这种手段就是为了避免穷举法
也就是一环出错就无法完整整体的破解

再者就是因为针对大数据,所以要求必须快,而这类算法典型都是针对超过1KB以上数据进行加密的
想象一下,穷举1KB的数据,你该如何做?

而且他是没办法逆运算的哦,你需要一个一个的审查,嘿嘿

xywhsoft 2012-01-30 18:53
另外摘要算法密文和原文是一一对应的
而加密算法则是三角恋关系,这样破解的话,原文、密码,缺一不可,靠猜是不行的
也就是说无所谓爆破

whtsky 2012-01-30 18:56
好吧

jybox 2012-01-30 19:39
已经解锁了,等你编辑完我还会锁回去.....

设置的是只允许在发贴后20分钟内编辑

littlepig 2012-01-30 22:52
whtsky:[表情]
个人感觉,一个足够安全的加密算法要求要足够慢
如果算法快的话只要穷举就好了
也不能太慢,否则过度影响服务器效率
比较理想的值应该是家用电脑计算一个10位字符串速度在0.05~0.5s之间 (2012-01-30 18:16) 

MD5是用来校验的吧……貌似这种算法很需要效率的?

whtsky 2012-01-30 22:53
littlepig:MD5是用来校验的吧……貌似这种算法很需要效率的? (2012-01-30 22:52) 


jybox 2012-01-30 22:55
littlepig:MD5是用来校验的吧……貌似这种算法很需要效率的? (2012-01-30 22:52) 

加密算法的要求:
加密成本尽可能低
解密/破译成本尽可能高


很多时候后者比前者更重要

littlepig 2012-01-30 23:00
jybox:加密算法的要求:
加密成本尽可能低
解密/破译成本尽可能高
....... (2012-01-30 22:55) 

一般加密算法:呃,一般用户比较在意速度
文艺加密算法:是的,安全性第一
101011加密算法:…………………………

墨阐 2012-01-30 23:55
特不懂为什么用VB写

内容来自[手机版]

whtsky 2012-01-30 23:56
墨阐:特不懂为什么用VB写
内容来自[手机版]  (2012-01-30 23:55) 

因为楼主是搞VB的。。

墨阐 2012-01-30 23:58
#47  看百度百科Example都是C写的.lz是翻译的么...

内容来自[手机版]

whtsky 2012-01-30 23:59
墨阐:#47  看百度百科Example都是C写的.lz是翻译的么...
内容来自[手机版]  (2012-01-30 23:58) 

有百科么?xywhEncry1?

墨阐 2012-01-31 00:01
RC4/抠鼻 不然我还问lz是否自己翻译- -||

内容来自[手机版]

墨阐 2012-01-31 00:42
所以其实你把它改得妈都不认得也没多大关系(貌似它只有爸…).只要加密强度够,成本低.独立发布都木事.

内容来自[手机版]

xywhsoft 2012-01-31 01:43
啊,解释两件事情:

1.这个当然不是VB,你见过VB支持这么淫荡的指针用法么?编译器名叫FreeBasic,是依托GCC的Basic编译器

2.这个算法是原创,因为刚创作出来,所以百度是找不到的,至于我提到RC4,是因为这个算法某些层面类似RC4,但有不是RC4,主要表现在使用了三重伪随机和四字节运算加速等手段,所以,他的安全性比RC4更好,速度也比RC4更快

强度是不需要担心的,我用了比RC4强数倍的极端手段做密钥混淆
成本么……源代码 + 静态库 + 动态库   都放出来了,意味着这一开始就是开源免费的东西,成本不计


一般加密算法:呃,一般用户比较在意速度
文艺加密算法:是的,安全性第一
101011加密算法:


另外这个我怎么看都不是加密算法……

事实上常见的算法分为:
采样算法[摘要算法],代表是MD5
编码算法,代表是Base64和Hex
混淆算法,就是很多人所谓的加密……实际就是类似编码算法换了一种显示方式而已
加密算法:根据密码与原文,制造出密文的通信加密手段
压缩算法:采取去除高位、重复链接等手段使原文件尽量小的算法


而我发这个,是加密算法,别搞混

墨阐 2012-01-31 01:50
刚才看到FreeBasic了,抱歉没把代码全看完,爪机ing.说实话对你说的几个算法感觉界限分得不是很清…代码也没看,不知道怎么写的.在学校,也试不了.

内容来自[手机版]

墨阐 2012-01-31 01:51
既然是可逆,那么伪随机不能干扰主信息位,也就是说随机数只能起对Cracker的干扰作用.对吧.

内容来自[手机版]

墨阐 2012-01-31 01:56
签名/采样,加密,压缩.个人基本分成这三个情况.

内容来自[手机版]

xywhsoft 2012-01-31 01:59
是这样的,三重伪随机:

首先将密码填充到一个256字节的结构中
第一重伪随机,将这个结构通过溢出取八位运算[可以理解为MOD运算],混淆到K盒,并在过程中抽取摘样混淆码用于第二重伪随机
第二重伪随机,根据混淆码与K盒数据运算,并且溢出取十六位求余,混淆到S盒,S盒为4096字节
这个时候S盒就作为密钥使用[可以理解为将密码放大到4096长度]
第三重伪随机进行同时进行加密,首先S盒与下一元素进行溢出计算,并且赋给当前元素,这样保证同样的内容加密出来的随机性,随后与原文进行XOR计算



可以理解为,没有密钥的情况是,是绝对不可能破解的
有密钥则可以还原回原文,但有原文是不可能还原回密钥的

并且采用XOR计算的算法有一个优点,就是加密和解密可以使用同一个函数
也就是对称加密算法

xywhsoft 2012-01-31 02:00
没有随机数
伪随机使用类似这样的计算

(128 + 256) and &HFF = 128

两个值相加,并取八位,循环数据交换混淆,过程是不可逆的
而多重伪随机就是确保绝对的不可逆




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.062425 second(s),query:5 Gzip enabled