一个简单且安全的文件加密算法------抑或加密

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

       如果你有秘密资料,不想别人看,那么你可以利用下面的加密解密方法(我们不妨假定文件不超过1G)。

       

       加解密原理:将文件中的0和1按照某种法则进行变化,代码如下:

#include <stdio.h>#include <stdlib.h>#include <string.h>#define KEY 729520  // 加密密码#define FILE_NAME_MAX_SIZE 100  // 文件名长度// 变换法则int genFun(int size, int key, int i)return size + key + i - size / key;}// 获得文件大小int getFileSize(char str[]){ FILE *fp = fopen(str, "rb");    fseek( fp, 0, SEEK_END );    int size =  ftell(fp); fclose(fp); return size;}// 文件加密void encrypt(char toBeEncFileName[], int key)char newFileName[FILE_NAME_MAX_SIZE] = {'i', 'j', 'k'};    strcat(newFileName, toBeEncFileName);  FILE *fp1 = fopen(toBeEncFileName, "rb"); FILE *fp2 = fopen(newFileName, "wb");  int i, s, t, size = getFileSize(toBeEncFileName); for(i = 0; i < size; i++) {  s = getc(fp1);  t = genFun(size, key, i) ^ s;  // 加密  putc(t, fp2); } fclose(fp1); fclose(fp2);}int main()printf("这是一个文件加密软件!\n"); printf("请输入您的加密身份认证:"); int key; scanf("%d", &key); if(KEY != key) {  printf("身份认证错误!\n");  exit(1); } printf("请输入文件的文件名(包括后缀):"); char fileName[FILE_NAME_MAX_SIZE]; scanf("%s", fileName); encrypt(fileName, KEY);  printf("加密完成!\n");  return 0;}
      加密界面为:

    

       下面附上解密代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#define KEY 729520  // 解密密码#define FILE_NAME_MAX_SIZE 100  // 文件名长度// 变换法则int genFun(int size, int key, int i)return size + key + i - size / key;}// 获得文件大小int getFileSize(char str[]){ FILE *fp = fopen(str, "rb");    fseek( fp, 0, SEEK_END );    int size =  ftell(fp); fclose(fp); return size;}// 文件解密void decrypt(char toBeDecFileName[], int key)char newFileName[FILE_NAME_MAX_SIZE] = {'i', 'j', 'k'};    strcat(newFileName, toBeDecFileName);  FILE *fp1 = fopen(toBeDecFileName, "rb"); FILE *fp2 = fopen(newFileName, "wb");  int i, s, t, size = getFileSize(toBeDecFileName); for(i = 0; i < size; i++) {  s = getc(fp1);  t = genFun(size, key, i) ^ s; // 解密  putc(t, fp2); } fclose(fp1); fclose(fp2);}int main()printf("这是一个文件解密软件!\n"); printf("请输入密码:"); int key; scanf("%d", &key); if(KEY != key) {  printf("密码错误!\n");  exit(1); }    printf("请输入文件的文件名(包括后缀):"); char fileName[FILE_NAME_MAX_SIZE]; scanf("%s", fileName); decrypt(fileName, key);  printf("解密完成!\n");  return 0;}


           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件加密解密算法(Java源码) java,file,算法,加密解密,java源码 package com.crypto.encrypt; import java.security.SecureRandom; import java.io.*; import javax.crypto.spec.DESKeySpec; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.Cipher; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import javax.crypto.NoSuchPaddingException; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import java.lang.reflect.Constructor; import java.security.spec.KeySpec; import java.lang.reflect.InvocationTargetException; public class EncryptData { private String keyfile=null; public EncryptData() { } public EncryptData(String keyfile) { this.keyfile=keyfile; } /** * 加密文件 * @param filename String 源路径 * @param filenamekey String 加密后的路径 */ public void createEncryptData(String filename,String filenamekey) throws IllegalStateException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, IOException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException, IllegalStateException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, IOException { //验证keyfile if(keyfile==null || keyfile.equals("")) { throw new NullPointerException("无效的key文件路径"); } encryptData(filename,filenamekey); } /** * 加密文件 * @param filename String 原始的类文件 * @param encryptfile String 加密后的类文件 * @throws IOException * @throws InvalidKeyException * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException * @throws NoSuchPaddingException * @throws NoSuchAlgorithmException * @throws BadPaddingException * @throws IllegalBlockSizeException * @throws IllegalStateException */ private void encryptData(String filename,String encryptfile) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, IllegalStateException, ClassNotFoundException, SecurityException, NoSuchMethodException, InvocationTargetException, IllegalArgumentException, IllegalAccessException, InstantiationException { byte data[]=Util.readFile(filename); // 执行加密操作 byte encryptedClassData[] = getencryptData(data); // 保存加密后的文件,覆盖原有的类文件。 Util.writeFile(encryptedClassData,encryptfile); } /** * 直接获得加密数据 * @param bytes byte[] * @throws IllegalStateException * @throws IllegalBlockSizeException * @throws BadPaddingException * @throws InvalidKeyException * @throws NoSuchPaddingException * @throws InvalidKeySpecException * @throws NoSuchAlgorithmException * @throws InstantiationException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws InvocationTargetException * @throws NoSuchMethodException * @throws SecurityException * @throws ClassNotFoundException * @throws IOException * @return byte[] */ public byte[] createEncryptData(byte[] bytes) throws IllegalStateException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException, IOException { bytes=getencryptData(bytes); return bytes; } private byte[] getencryptData(byte[] bytes) throws IOException, ClassNotFoundException, SecurityException, NoSuchMethodException, InvocationTargetException, IllegalArgumentException, IllegalAccessException, InstantiationException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, IllegalStateException { // 产生一个可信任的随机数源 SecureRandom sr = new SecureRandom(); //从密钥文件key Filename中得到密钥数据 byte[] rawKeyData = Util.readFile(keyfile); // 从原始密钥数据创建DESKeySpec对象 Class classkeyspec=Class.forName(Util.getValue("keyspec")); Constructor constructor = classkeyspec.getConstructor(new Class[]{byte[].class}); KeySpec dks = (KeySpec) constructor.newInstance(new Object[]{rawKeyData}); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(Util.getAlgorithm()); SecretKey key = keyFactory.generateSecret(dks); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(Util.getAlgorithm()); // 用密钥初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, key, sr); // 执行加密操作 bytes = cipher.doFinal(bytes); // 返回字节数组 return bytes; } /** * 设置key文件路径 * @param keyfile String */ public void setKeyFile(String keyfile) { this.keyfile=keyfile; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值