VBS实现文件逐字节异或

VBS实现文件逐字节异或

代码如下

'来源:http://blog.youkuaiyun.com/markinlqx/article/details/18987039
'数组转字符串函数 Convert array to string  
'Writer         Markin.Q.Li  
'Create Date    2013-4-28  
'arrayName      arrayName  
'separator      separator  
'Example        ConvertArrayToString(arrayName, ",")  
Public Function ConvertArrayToString(arrayName, separator)  
   Dim elementString  

    For Each element In arrayName  
        elementString = elementString + Cstr(element) + separator  
    Next  

    elementString = StrReverse(elementString)  
    elementString = Replace(elementString, separator,"",1,1)  
    elementString = StrReverse(elementString)  

    ConvertArrayToString = elementString  
End Function

'来源:http://demon.tw/programming/vbs-binary-file.html
'VBS读写二进制文件函数
Function ReadBinary(FileName)
  Dim Buf(), I
  With CreateObject("ADODB.Stream")
    .Mode = 3: .Type = 1: .Open: .LoadFromFile FileName
    ReDim Buf(.Size - 1)
    For I = 0 To .Size - 1: Buf(I) = AscB(.Read(1)): Next
    .Close
  End With
  ReadBinary = Buf
End Function

Sub WriteBinary(FileName, Buf)
  Dim I, aBuf, Size, bStream
  Size = UBound(Buf): ReDim aBuf(Size \ 2)
  For I = 0 To Size - 1 Step 2
      aBuf(I \ 2) = ChrW(Buf(I + 1) * 256 + Buf(I))
  Next
  If I = Size Then aBuf(I \ 2) = ChrW(Buf(I))
  aBuf=Join(aBuf, "")
  Set bStream = CreateObject("ADODB.Stream")
  bStream.Type = 1: bStream.Open
  With CreateObject("ADODB.Stream")
    .Type = 2 : .Open: .WriteText aBuf
    .Position = 2: .CopyTo bStream: .Close
  End With
  bStream.SaveToFile FileName, 2: bStream.Close
  Set bStream = Nothing
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''

set oArgs=wscript.arguments
dim file1,file2
file1=oArgs(0)
file2=oArgs(1)

txt1=ReadBinary(file1)
txt2=ReadBinary(file2)

j=0
for each i in txt1
    'WScript.echo Cstr(txt1(j) XOR txt2(j))
    WScript.echo Chr(txt1(j) XOR txt2(j))
    j=j+1
next

'WScript.echo ConvertArrayToString(txt1,",")

set oArgs=Nothing

逐字异或加密是一种简单但有效的对称加密方法,其基本思想是对数据的每一个与一个密钥进行异或运算。以下是使用C语言实现该算法对文本文件进行加密和解密的完整示例。 ### 加密流程 - 读取明文文件的内容。 - 使用指定的密钥对每个进行异或操作。 - 将加密后的内容写入新的文件。 ### 解密流程 由于异或运算的特性(即 $ a \oplus b = c $,则 $ c \oplus b = a $),解密过程与加密过程完全相同。 以下是一个完整的C语言实现: ```c #include <stdio.h> #include <stdlib.h> #define KEY 0xA5 // 示例密钥,可以修改为其他值 // 对单个进行异或加密/解密 unsigned char xor_encrypt_decrypt(unsigned char byte) { return byte ^ KEY; } // 文件加密/解密函数 void process_file(const char *input_path, const char *output_path) { FILE *input_file = fopen(input_path, "rb"); FILE *output_file = fopen(output_path, "wb"); if (!input_file || !output_file) { perror("无法打开文件"); exit(EXIT_FAILURE); } int byte; while ((byte = fgetc(input_file)) != EOF) { unsigned char processed_byte = xor_encrypt_decrypt((unsigned char)byte); fputc(processed_byte, output_file); } fclose(input_file); fclose(output_file); } int main() { const char *plaintext_file = "plaintext.txt"; // 明文文件路径 const char *encrypted_file = "encrypted.bin"; // 加密后的文件路径 const char *decrypted_file = "decrypted.txt"; // 解密后的文件路径 // 执行加密操作 process_file(plaintext_file, encrypted_file); // 执行解密操作 process_file(encrypted_file, decrypted_file); printf("加密和解密操作已完成。\n"); return 0; } ``` ### 实现说明 1. **密钥定义**:通过宏 `#define KEY 0xA5` 定义了一个简单的单密钥,可以根据需求修改。 2. **异或处理函数**:`xor_encrypt_decrypt` 函数用于执行单个异或操作。 3. **文件处理函数**:`process_file` 函数负责读取输入文件并将其内容逐字异或后写入输出文件。 4. **主函数**:主函数中分别调用了 `process_file` 来完成加密和解密操作。 ### 注意事项 - 加密后的文件建议以二进制模式 (`"wb"`) 写入,避免因操作系统不同导致的数据转换问题。 - 密钥应保密,否则将导致加密失效。 - 异或加密的安全性较低,仅适用于教学或简单场景,实际应用中需结合更复杂的加密机制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值