linuxdes
㈠ des解密算法,利用C语言解密JAVA语言加密的密码。。密钥为12345678,加密后的密文为:26d086be3a3a62fc
// C 语言 DES用的是 ECB模式, 没有填充
// 因此Java端要对应, 你的明文是 liubiao 吗?
// 另外 DES已经不安全了, 如果可以改为 3DES或者 AES吧。
public class LearnDes {
public static void main(String[] args) {
try {
System.out.println(encrypt("liubiao", "12345678"));
System.out.println(decrypt("26d086be3a3a62fc", "12345678"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String encrypt(String message, String key) throws Exception {
//Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
Cipher cipher = Cipher.getInstance("DES/ECB/NOPADDING");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
//cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKey );
return toHexString(cipher.doFinal(message.getBytes("UTF-8")));
}
public static String decrypt(String message, String key) throws Exception {
byte[] bytesrc = convertHexString(message);
//Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
Cipher cipher = Cipher.getInstance("DES/ECB/NOPADDING");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
//cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
cipher.init(Cipher.DECRYPT_MODE, secretKey );
byte[] retByte = cipher.doFinal(bytesrc);
return new String(retByte);
}
public static byte[] convertHexString(String ss) {
byte digest[] = new byte[ss.length() / 2];
for (int i = 0; i < digest.length; i++) {
String byteString = ss.substring(2 * i, 2 * i + 2);
int byteValue = Integer.parseInt(byteString, 16);
digest[i] = (byte) byteValue;
}
return digest;
}
public static String toHexString(byte b[]) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String plainText = Integer.toHexString(0xff & b[i]);
if (plainText.length() < 2)
plainText = "0" + plainText;
hexString.append(plainText);
}
return hexString.toString();
}
}
当多个进程同时访问一个文件的时候,普通的write/read在执行的时候,无法保证操作的原子性,可能会导致文件被污染,达不到预期的结果。
任何一个需要多个函数调用的操作都不可能是原子操作,因为在两个函数调用间,内核可能会将进程挂起执行另外的进程。
如果想要避免这种情况的话,则需要使用pread/pwrite函数
ssize_t pread(int fd ,void *buffer ,size_t size,off_t offset)
返回真正读取到的字节数,offset是指的从文件开始位置起的offset个字节数开始读。其余的参数与read无异。
PS:
pread是无法中断的原子操作,无法中断它的定位和读取操作
pread读取过后的文件偏移量不会发生改变
同理pwrite也是一样的
而在文件创建的时候也是一样的,当需要做文件创建同步的时候,我们需要在O_CREATE的时候,加上O_EXCL标志位,当已经创建过的话,会返回fd,否则返回错误
int p( int filedes):
传入一个文件描述符,返回当前可用的最小文件描述符。
int p2(int filedes,int filedes2):
传入文件描述符,以及新的文件描述符,如果新的文件描述符所指向的文件已经打开,则会强行将其关闭后,将该文件描述符指向到已存在的文件描述符。
如果filedes和filedes2指向同一个文件,则不做任何处理,直接返回filedes2,不会关闭文件
新返回回来的filedes2会共享filedes的文件状态标识,文件偏移量等等信息。因为它们的文件指针会指向文件表的同一个位置。只是fd不一样而已。
㈢ 悬赏,linux系统与全盘格式化问题!!高手请进。。。
同学,你装不了的现象是什么呢,不过L的系统的确存在这个问题,解决方法几乎很难确定,比如我的兼容机装u8.04就是在装机的时候死机,而8。10就不会,最终才发现是因为显卡驱动的问题。我推荐你用虚拟机来装L吧,那样比较不会出问题。全盘格式化最简单的方法就是你在安装系统时(WINDOWS)选择全新安装,而且先把C以外的分区都删除再重新划分,装完后进入系统,对这些新分区盘格式化(因为它们没格式化不能使用)。我想你是想学习L吧,建议用虚拟机或者装W和L双系统,这样出了问题好解决。
㈣ linux压缩文件怎么加密
方法一:用tar命令 对文件加密压缩和解压
压缩:
tar-zcf-filename|openssldes3-salt-kpassword|ddof=filename.des3
此命令对filename文件进行加码压缩 生成filename.des3加密压缩文件, password 为加密的密码。
方法二:用zip命令对文件加密压缩和解压
zip-refilename.zipfilename回车,输入2次密码
㈤ 如何在Linux下用C语言实现MD5/DES解密
相关库函数如下:
#include <openssl/md5.h>
unsigned char *MD5(const unsigned char *d, unsigned long n,unsigned char *md);
int MD5_Init(MD5_CTX *c);
int MD5_Update(MD5_CTX *c, const void *data,unsigned long len);
int MD5_Final(unsigned char *md, MD5_CTX *c);
