作者:叶子的离开 此贴贴于2012-1-30 18:13:06,已被阅读648次/回复0 
只想看核心源代码的点这里[FreeBasic代码]
Sub xywhEncry1(ByVal DataPtr As Any Ptr,ByVal DataSize As Integer,ByVal Paaword As ZString Ptr,ByVal PwSize As Integer) Export
    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
    DeAllocate(RAM)
    #Ifdef DebugMode
        putfile(ExePath & "\Dump-TPW.txt",@TPW(0),0,256)
    #EndIf
    
    For i = 0 To 63                            ' 进行第一次对密钥的伪随机混淆[K盒混淆]
        Dim TB(3) As UByte
        CopyMemory(@TB(0),@TPW(i),4)
        TmpInt = (TmpInt + TB(0)) And &HFF
        TB(0) = TmpInt
        TmpInt = (TmpInt + TB(1)) And &HFF
        TB(1) = TmpInt
        TmpInt = (TmpInt + TB(2)) And &HFF
        TB(2) = TmpInt
        TmpInt = (TmpInt + TB(3)) And &HFF
        TB(3) = 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 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
    #Ifdef DebugMode
        PutFile(ExePath & "\Dump-SBox.txt",@SBox(0),0,4096)
    #EndIf
    
    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
    #Ifdef DebugMode
        PutFile(ExePath & "\Dump-All.txt",DataPtr,0,DataSize)
    #EndIf
End Sub

套用某人的话:“还有比叶子更菜的吗???”

此贴的父贴(直接):
自写加密算法[xywhEncry1],帖内下载,标题要长……………………………………644 叶子的离开 2012-1-30 18:00:05 331 正常+Mail回复贴