object-c 和 java 可以通用的DES散列加密

来源:互联网 发布:java小数点保留两位 编辑:程序博客网 时间:2024/05/21 01:45

Java 加密和解密

public class CryPtor {    /**    * 加密    * @param datasource byte[]    * @param password String    * @return byte[]    */    public static byte[] encrypt(byte[] datasource, String password) {     try{    SecureRandom random = new SecureRandom();    DESKeySpec desKey = new DESKeySpec(password.getBytes());    //创建一个密匙工厂,然后用它把DESKeySpec转换成    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");    SecretKey securekey = keyFactory.generateSecret(desKey);    //Cipher对象实际完成加密操作    Cipher cipher = Cipher.getInstance("DES");    //用密匙初始化Cipher对象    cipher.init(Cipher.ENCRYPT_MODE, securekey, random);    //现在,获取数据并加密    //正式执行加密操作    return cipher.doFinal(datasource);    }catch(Throwable e){    e.printStackTrace();    }    return null;    }    /**    * 解密    * @param src byte[]    * @param password String    * @return byte[]    * @throws Exception    */    public static byte[] decrypt(byte[] src, String password) throws Exception {    // DES算法要求有一个可信任的随机数源    SecureRandom random = new SecureRandom();    // 创建一个DESKeySpec对象    DESKeySpec desKey = new DESKeySpec(password.getBytes());    // 创建一个密匙工厂    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");    // 将DESKeySpec对象转换成SecretKey对象    SecretKey securekey = keyFactory.generateSecret(desKey);    // Cipher对象实际完成解密操作    Cipher cipher = Cipher.getInstance("DES");    // 用密匙初始化Cipher对象    cipher.init(Cipher.DECRYPT_MODE, securekey, random);    // 真正开始解密操作    return cipher.doFinal(src);    }    public static void main(String[] args) {        // TODO Auto-generated method stub    byte[] byts = CryPtor.encrypt("1234567".getBytes(), "1234abcde");    }}

object-c加密和解密

#import <CommonCrypto/CommonCryptor.h>#import "GTMBase64.h"@implementation CryptorModel/*字符串加密 *参数 *plainText : 加密明文 *key        : 密钥 64位 */+ (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key{    NSString *ciphertext = nil;    const char *textBytes = [plainText UTF8String];    NSUInteger dataLength = [plainText length];    char buffer[1024];    memset(buffer, 0, sizeof(char));    //偏移向量没有用,我发现使用它无法解密,不知道为什么    Byte iv[] = {1,2,3,4,5,6,7,8};    size_t numBytesEncrypted = 0;    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,                                          kCCOptionECBMode|kCCOptionPKCS7Padding,                                          [key UTF8String], kCCKeySizeDES,                                          NULL,                                          textBytes, dataLength,                                          buffer, 1024,                                          &numBytesEncrypted);    if (cryptStatus == kCCSuccess) {        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];        for (int i = 0 ; i <numBytesEncrypted ; i ++ ) {            printf("data %d\n" , buffer[i]);        }        ciphertext = [[NSString alloc] initWithData:[GTMBase64 encodeData:data] encoding:NSUTF8StringEncoding];    }    return ciphertext;}//解密+ (NSString *) decryptUseDES:(NSString*)cipherText key:(NSString*)key{    NSData* cipherData = [GTMBase64 decodeString:cipherText];    unsigned char buffer[1024];    memset(buffer, 0, sizeof(char));    size_t numBytesDecrypted = 0;    Byte iv[] = {1,2,3,4,5,6,7,8};   // Byte iv[] = {0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,                                          kCCAlgorithmDES,                                          kCCOptionECBMode|kCCOptionPKCS7Padding,                                          [key UTF8String],                                          kCCKeySizeDES,                                          NULL,                                          [cipherData bytes],                                          [cipherData length],                                          buffer,                                          1024,                                          &numBytesDecrypted);    NSString* plainText = nil;    if (cryptStatus == kCCSuccess) {        NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];        plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];    }    return plainText;}
原创粉丝点击