首页 > 程序开发 > 移动开发 > 其他 > 正文
object-c 和 java 可以通用的DES散列加密
2017-05-19       个评论    来源:bobbob32的博客  
收藏    我要投稿

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 
#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 
        
   
点击复制链接 与好友分享!回本站首页
上一篇:SpriteKit游戏如何一步一步重构在场景中增加金币动画(一)
下一篇:使用VideoToolBox硬解码MJPEG编码格式视频
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站