iOS-加密算法

2023-11-05

一、散列算法(签名算法/摘要)

散列算法,又称哈希函数,是一种单向加密算法。在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。因为其结果是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名。

  • MD5
    不可逆:MD5是不可逆转的。
    压缩性:任意长度的数据,算出的MD5值长度都是固定的。
    容易计算:从原数据计算出MD5值很容易。
    抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
    强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据是非常困难的。
    主要用于验证,防止信息被修。具体用途如:文件校验、数字签名、鉴权协议。
-(NSString *)md5 {
    if (!self) return nil;
    
    const char *cStr = self.UTF8String;
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
    
    NSMutableString *md5Str = [NSMutableString string];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; ++i) {
        [md5Str appendFormat:@"%02x", result[i]];
    }
    return md5Str;
}
  • SHA
    是由NISTNSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。
    SHA-1设计时基于和MD4相同原理,并且模仿了该算法。
    SHA-1是由美国标准技术局(NIST)颁布的国家标准,是一种应用最为广泛的Hash函数算法,也是目前最先进的加密技术,被政府部门和私营业主用来处理敏感的信息。
    SHA-1基于MD5,MD5又基于MD4。
 - (NSString*) sha1
{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
    //使用对应的CC_SHA1,CC_SHA256,CC_SHA384,CC_SHA512的长度分别是20,32,48,64
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    //使用对应的CC_SHA256,CC_SHA384,CC_SHA512
    CC_SHA1(data.bytes, data.length, digest);
    
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    
    return output;
}

二、对称算法

对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。

  • AES
    高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。
    主要应用在关键数据和文件的的保密同时又需要解密的情形,其加密密钥和解密密钥相同,根据密钥长度分为128、192和256三种级别,密钥长度越大安全性也就越大,但性能也就越低,根据实际业务的安全要求来决定就好。通常情况,对一些关键数据进行加密的对象都是字符串,加密结果也以字符串进行保存,所以在设计接口的时候参数和返回值均为字符串。
//AES128位加密 base64编码 注:kCCKeySizeAES128点进去可以更换256位加密
-(NSString *)aes128Encrypt:(NSString *)key
{
    char keyPtr[kCCKeySizeAES128+1];//
    memset(keyPtr, 0, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    NSData* data = [self dataUsingEncoding:NSUTF8StringEncoding];
    NSUInteger dataLength = [data length];
    
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmAES128,
                                          kCCOptionPKCS7Padding|kCCOptionECBMode,
                                          keyPtr,
                                          kCCBlockSizeAES128,
                                          NULL,
                                          [data bytes],
                                          dataLength,
                                          buffer,
                                          bufferSize,
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
        NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
        
        NSString *stringBase64 = [resultData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; // base64格式的字符串
        return stringBase64;
        
    }
    free(buffer);
    return nil;
}

//解密
-(NSString *)aes128Decrypt:(NSString *)key
{
    char keyPtr[kCCKeySizeAES128 + 1];
    memset(keyPtr, 0, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    NSData *data = [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];//base64解码
    
    NSUInteger dataLength = [data length];
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    
    size_t numBytesCrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES128,
                                          kCCOptionPKCS7Padding|kCCOptionECBMode,
                                          keyPtr,
                                          kCCBlockSizeAES128,
                                          NULL,
                                          [data bytes],
                                          dataLength,
                                          buffer,
                                          bufferSize,
                                          &numBytesCrypted);
    if (cryptStatus == kCCSuccess) {
        NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
        
        return [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
    }
    free(buffer);
    return nil;
}
  • DES
    数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解)
- (NSString *) desEncrypt:(NSString *)key
{
    NSString *ciphertext = nil;
    const char *textBytes = [self UTF8String];
    NSUInteger dataLength = [self length];
  
    size_t bufferPtrSize = (dataLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
    unsigned char* buffer = (unsigned char *)malloc(bufferPtrSize);;
    memset(buffer, 0, bufferPtrSize);
    Byte iv[] = {1,2,3,4,5,6,7,8};
    size_t numBytesEncrypted = 0;
      
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, //  加密/解密
                                          kCCAlgorithmDES, //  加密根据哪个标准(des,3des,aes。。。。)
                                          kCCOptionPKCS7Padding, //  选项分组密码算法(des:对每块分组加一次密  3DES:对每块分组加三个不同的密)
                                          [key UTF8String], //密钥    加密和解密的密钥必须一致
                                          kCCKeySizeDES, //   DES 密钥的大小(kCCKeySizeDES=8)
                                          iv, //  可选的初始矢量
                                          textBytes, dataLength,
                                          buffer, bufferPtrSize,
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
          
        ciphertext = [[NSString alloc] initWithData:[data base64EncodedDataWithOptions:0] encoding:NSUTF8StringEncoding];
    }
    free(buffer);
    return ciphertext;
}
  
//解密
- (NSString *) desDecrypt:(NSString*)key
{
    NSData* cipherData = [[NSData alloc] initWithBase64EncodedString:self options:0];
      
    NSUInteger dataLength = [self length];
    size_t bufferPtrSize = (dataLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
    unsigned char* buffer = (unsigned char *)malloc(bufferPtrSize);;
    memset(buffer, 0, bufferPtrSize);
      
    size_t numBytesDecrypted = 0;
    Byte iv[] = {1,2,3,4,5,6,7,8};
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding,
                                          [key UTF8String],
                                          kCCKeySizeDES,
                                          iv,
                                          [cipherData bytes],
                                          [cipherData length],
                                          buffer,
                                          bufferPtrSize,
                                          &numBytesDecrypted);
    NSString* plainText = nil;
    if (cryptStatus == kCCSuccess) {
        NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
        plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }
      
    free(buffer);
    return plainText;
}

三、非对称算法

非对称加密工作原理:

乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。
在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

非对称加密一般有两种用途:
进行数据认证(鉴权)服务校验,即对发送数据方是否是我们所期望的那个做验证。私钥加签,公钥验签。
对数据进行加密,公钥加密,私钥解密。由于非对称加密算法的低效,所以各密码机构主张对称加密算法和非对称加密算法结合,用对称加密算法加密内容,用非对称加密算法加密对称算法的密钥。在算法设计上,非对称加密算法对待加密数据长度要求极为苛刻。比如,RSA算法要求待加密数据长度不得超过53个字节。所以,非对称加密主要用于交换对称加密的秘密密钥,而非数据内容上的加密。

  • RSA
  • 新建存储密钥文件夹RSA
  • 在该文件夹目录下执行openssl命令
  • 生成私钥:genrsa -out rsa_private_key.pem 1024
  • 将私钥转成PKCS8的格式,格式转好后立刻复制
    pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
  • 生成公钥:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
    打开刚才的RSA文件里的rsa_public_key.pem获取公钥
  • 引入工具类 Objective-C-RSA,用于加密解密
	NSString *pubkey = @"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHNhQwlZs3zjic1m5rCwVZ9DEwPED9bgXvWRQVeRDA/iiZwbp1Z3xJI1ybu9IWzxBvmeh6Knilh36+MuRtMs3arVoIa3LgErPrYPDoMmEBfSloFiBh8MDmHzCM5pSU15qrVe5Ml4uTrazQhTuCi086Bj6Bmf70Bvoij+nC1WnLSwIDAQAB\n-----END PUBLIC KEY-----";
    NSString *privkey = @"-----BEGIN PRIVATE KEY-----\nMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMc2FDCVmzfOOJzWbmsLBVn0MTA8QP1uBe9ZFBV5EMD+KJnBunVnfEkjXJu70hbPEG+Z6HoqeKWHfr4y5G0yzdqtWghrcuASs+tg8OgyYQF9KWgWIGHwwOYfMIzmlJTXmqtV7kyXi5OtrNCFO4KLTzoGPoGZ/vQG+iKP6cLVactLAgMBAAECgYBaH5QYusYjBA/GnJgNo0nDfV73dHrubGUQ+FrGsCOtPA6AKQ3C6ZNnvzC5X8pW+Ux1QMrU4fv83wSu5XVEFbTcyRNY58l2ZE9oHYh3CDr0kLSqBUpSx1MjCk6pHwrYeIKVQtyKZpNjwc6o8Iop4Vz0f5YLxSrt58tx/JH0Ndlr8QJBAPrho7I3tbcfKjL9k+61+A5Y5uzOfjwuOJynjoEeWLv1JLjT4uU2F1hlrhE7RpNWgRWV9zAoUIjK7kOWicdf3fkCQQDLRpCTh8SWKITwKHXJGEw49/l7RjKtn38ju4SuLkEfGZCd9+P1RO5FNuDWxLbJrPLR8yxHo+2uggJ4Gg6D25RjAkEAtC8sn4oNc7jpWPfwsGh3AO7u47MmzNgxhql82tVNy6i0OB7N/euMdsuIag3VkWp2iWdMwoSh2q1M1LQgvlXnGQJAKHSTw3jKzCOmSXGT94CpctEPStRus5VBpWflgRDdjwX0fSvfp2mfjhDc8IFX641LCjO+RUe/vvJK8YImD2H9BwJANxMZFA135dBXNZ/lKPZ/5p2bBfeJ7M9qnDJJpsASsGKrwbSCQUl1Qcq1oUVqvN0Z+syerVPtTztyMqNkLuwp5g==\n-----END PRIVATE KEY-----";

    NSString *originString = @"hello world!";
    
    NSLog(@"Original string(%d): %@", (int)originString.length, originString);
    
    // 公钥加密
    NSString *encWithPubKey = [RSA encryptString:originString publicKey:pubkey];
    NSLog(@"Enctypted with public key: %@", encWithPubKey);
    // 私钥解密
    NSString *decWithPrivKey = [RSA decryptString:encWithPubKey privateKey:privkey];
    NSLog(@"Decrypted with private key: %@", decWithPrivKey);
    
    // 私钥加密
    NSString *encWithPrivKey = [RSA encryptString:originString privateKey:privkey];
    NSLog(@"Enctypted with private key: %@", encWithPrivKey);

    // 公钥解密
    NSString *decWithPublicKey = [RSA decryptString:encWithPrivKey publicKey:pubkey];
    NSLog(@"Decrypted with public key: %@", decWithPublicKey);
    
打印结果
2020-09-05 10:56:51.829078+0800 ModuleProject[8630:93898] Original string: hello world!
2020-09-05 10:56:51.849902+0800 ModuleProject[8630:93898] Enctypted with public key: msJnCtTPe3KCvsg4psupRx/8gtyIABBLgkEqb46wvROnTIl3NcaGE0GOR8hQ5mgUPDd+2RrnNilB0d+/C+lQoOiu1zir33sezSS+HEygt0LQhWbbn4ZkD46Z8QhQJEYHnS8WERLUHOen31BEaWy+eMRCcAQ41zKlKpfKHx0rDtI=
2020-09-05 10:56:51.861117+0800 ModuleProject[8630:93898] Decrypted with private key: hello world!
2020-09-05 10:56:51.955834+0800 ModuleProject[8630:93898] Enctypted with private key: f7RidCBDRJ7DRKiIP3IhpP8Ob7jIzRc+7aarLOVmj4haRLmvI379rOxKtwRxbSzQV63vj3MIzUIuvpfF2c16osb1Is16PaxIj70ffZKBRzRx60OCy0DB5ZZGzE/GFVOdEkvTTXbGydfysxohUWZkB1VZmMZrNw1wTtkSK9bBVdM=
2020-09-05 10:56:51.984258+0800 ModuleProject[8630:93898] Decrypted with public key: hello world!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS-加密算法 的相关文章

  • 在 iOS 视图中获取触摸位置时,PAN 手势崩溃

    我只是做了一个示例来检查平移手势 平移手势正在检测并且工作正常 但每当我在平移手势中给出第二个点时 例如CGPoint secondPoint sender locationOfTouch 1 inView self imageView 它
  • Xcode 在每次启动时修改当前的 CoreData 模型版本

    我正在使用 Xcode 4 6 来处理使用 CoreData 的项目 数据模型现在是版本13 并且使用轻量级迁移 我的问题 每次启动时 Xcode 似乎都会修改 PROJECT xcdatamodeld xccurrentversion 文
  • Xcode:为我自己的应用程序创建自定义键盘

    我正在开发一个数学应用程序 所以我需要一个特定的键盘 我只能取小数点 但缺少正 负 按钮 现在我想编写一个自定义键盘 或者我想编辑小数点 什么更容易 如果我要编写自己的自定义键盘 我可以使用自定义键盘扩展吗 还是必须为单独视图中的每个数字创
  • 选择 MapView 注释两次

    我的 iPhone 应用程序有一个地图视图 其中有大量位置可供用户选择 我希望他能够点击其中一个注释来显示其标注视图 然后再次实际选择它 问题是 didSelectAnnotationView 只被调用一次 那么如何检测已选择的注释的选择呢
  • 在 Swift 中从另一个 ViewController 访问变量

    我有以下内容ViewController class PageContentViewController UIViewController var pageIndex Int 我如何访问pageIndex来自另一个 ViewControll
  • 在 Swift 中,当使用“[weak self] in”时,当嵌套在另一个闭包中时我是否应该加倍它[重复]

    这个问题在这里已经有答案了 在 Swift 中 当使用 weak self in 当嵌套在另一个闭包中时 我应该将其加倍吗 Example override func viewDidLoad super viewDidLoad makeAP
  • iOS7 后台同步

    我们必须开发一个应用程序 无论该应用程序是在前台还是在后台 都支持在某个时间间隔进行数据同步操作 我想知道在iOS7中 当应用程序在后台运行时 是否可以同步数据 即调用网络服务 我们可以在应用程序处于后台时访问 SQLite 数据库文件 我
  • iOS上数组的Swift Metal并行求和计算

    基于 Kametrixomanswer https stackoverflow com questions 38164634 compute sum of array values in parallel with metal swift
  • Xcode:libpods.a 为红色

    有人知道为什么吗 我正在使用 SWRevealViewController 到目前为止它一直在工作 我正在使用工作区 并且我已经研究过其他文章 但到目前为止没有任何效果 它不会引发错误 但是当我运行程序时 它不会加载任何内容 因为 SWRe
  • Swift 4 的observeValue(forKeyPath:...)方法

    我一直在尝试寻找一个例子 但我所看到的并不适合我的情况 以下代码等效于什么 object addObserver self forKeyPath keyPath options new context nil override public
  • 根据维基百科,为什么“call super”被视为反模式? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • sizeWithFont:constrainedToSize:lineBreakMode:不准确?

    sizeWithFont constrainedToSize lineBreakMode 似乎没有给我返回正确的宽度 执行这些代码后 我看到标签中的部分字符串被切断 这意味着我必须手动添加一些像素到大小 我错过了什么吗 我有一个 UILab
  • UISearchBar 与 UISearchDisplayController 在屏幕外动画

    我有标准的 iPad 视图控制器 其顶部有一个自定义导航栏 在 xib 文件中 我添加了一个与视图右边缘对齐的 UISearchBar 搜索栏的宽度为 320 像素 我像这样初始化一个搜索显示控制器 Search display contr
  • 在特定点停止 CABasicAnimation

    我正在使用创建的旋转动画CABasicAnimation 它旋转一个UIView超过2秒 但我需要能够阻止它UIView被感动了 如果我删除动画 视图将处于与动画开始之前相同的位置 这是我的动画代码 float duration 2 0 f
  • 删除 ios 和 android 的 PhoneGap 中的闪屏

    我正在尝试在 ios 和 android 的phonegap应用程序中完全删除启动屏幕 这navigator hide 函数仅在加载 html 页面后才起作用 但我需要在此之前删除启动屏幕 请告诉我是否有任何选项可以执行此操作 Cordov
  • 运行工具链时出现“xcrun:错误:无法找到 SDK“iphonesimulator””

    我正在尝试将 Kivy 程序编译到 iOS 上 但是当我运行构建 Kivy 发行版的命令时 我不断收到此错误 xcrun 错误 无法找到 SDK iphonesimulator 我的电脑上有 xcode 到底是怎么回事 有点晚了 但我在尝试
  • 当应用程序置于后台时,GCD 分派操作未运行

    我启动了一种方法 本质上是一个无限循环 使用dispatch queue create进而dispatch async 然后代码循环位于分派块内 循环完美运行 但是 当应用程序进入后台时 它会暂停 然后当应用程序进入前台时它会重新启动 我怎
  • 在ios swift中登录后从wkwebview获取令牌

    我正在 wkwebview 中加载一个用于登录的网址 成功登录后 它将重定向到内部页面 从那里单击按钮时 它将重定向到生成令牌的另一个页面 生成令牌后如何将其推送到 swift 应用程序 我需要将该令牌用于我的应用程序中的进一步使用 请帮忙
  • 使 Picker 与其他 BinaryInteger 类型兼容

    Picker仅当与以下一起使用时才能正常工作Int 当使用任何其他类型的BinaryInteger它根本不更新选择 为了解决这个问题 我想做一个CompatilibityPicker但我必须承认我的理解Binding实际上工作给我带来了很多
  • 将 NSData 转换为 JSON

    我有一个NSData对象 我需要将其转换为NSDictionary object NSData data 现在我需要将其转换为NSDictionary 我如何以编程方式执行此操作 注意 我保存后NSData to the NSDiction

随机推荐

  • keil5 编辑栏一直是灰色

    无语了 气炸了 愤怒啊 查了一下 有很多 arm 和 c51 并存 不管他了 之前装了用完51 又装了arm 现在反而什么都用不了 打开license 发现过期了 重新破解 即可 注意音乐 大半夜吓死人 你以为这样就可以了 你就太天真了 网
  • java:最差产品奖

    import java util Scanner 注意类名必须为 Main 不要有任何 package xxx 信息 public class Main public static void main String args Scanner
  • dll文件反编译源代码 C#反编译 dotpeek反编译dll文件后export

    目录 背景 下载安装dotpeek 导入dll文件 export导出文件 参考 背景 项目合作的时候 使用前人的或者其他部门dll文件直接在机台运行 会出现很多问题 逻辑 效率等等 此时我们可以选择对他们的代码进行反编译和重构 重新梳理逻辑
  • Windows C++运行命令编程

    Windows C 运行命令编程 一 命令处理方式 二 popen函数 三 重定向的子进程 四 参考链接 一 命令处理方式 Windows下编程经常需要使用批处理指令 bat或cmd 因此如何执行命令和获取返回数据是一个关键点 对于控制台程
  • STM32+IAP方案的实现,IAP实现原理(详细解决说明)。

    此文档内容摘自 http www 51hei com stm32 4315 html 可参考文档 https blog csdn net gin love article details 82015646 基于STM32F103ZET6的U
  • 力扣 剑指 Offer 25. 合并两个排序的链表

    简单题 就不多写了 class Solution public ListNode mergeTwoLists ListNode l1 ListNode l2 ListNode head new ListNode t head while l
  • 一文读懂大语言模型

    以ChatGPT为代表的大语言模型被很多人认为是新一轮科技革命的起点 本文旨在通过概念性介绍 让普通人能够尽可能理解人工智能以及大语言模型的基本概念 从而了解这些技术能做以及不能做什么 原文 A Very Gentle Introducti
  • 关系表的构成要素主键_关系模型简述

    关系模型简述 关系模型是基于表的处理方式抽象形成的 是在对传统表及其操作进行数学化严格定义基础上 引入集合理论与逻辑学理论提出的 关系模型也是数据库的三大经典数据模型之一 也是现在大多数商品化数据库系统所仍然再用的数据模型 数据库标准语言也
  • 流媒体服务器在大屏系统,视频流媒体服务器

    视频流媒体服务器 内容精选 换一换 音视频传输协议众多 不同业务应该如何选择 RTSP RTMP RTP RTC HLS MSS DASH WEBRTC RIST SRT 在此我们就从业务发展的视角来理解各种流媒体协议 帮助大家有更加清晰的
  • 一行命令跑满Linux的CPU

    今天突发奇想 想看看Linux的CPU跑满的样子 其实一行命令就可以使CPU跑满 for i in seq 1 cat proc cpuinfo grep physical id wc l do dd if dev zero of dev
  • nestjs:创建唯一键报错 QueryFailedError: Duplicate key name ‘IDX_d87a44fac9965cb7cf94cba11c‘

    问题 如题 参考 MYSQL中唯一约束和唯一索引的区别 51CTO博客 mysql主键和唯一索引的区别 解决办法 原始代码 Index Column unique true mail string 创建唯一约束时会创建唯一索引 所以应该把
  • score在java中是什么意思_Score.java

    import java io File import java io FileInputStream import java util Properties import java util Scanner import org jsoup
  • windows编程--网络编程学习--winsock编程(2)

    Winsock是windows系统下利用Socket套接字进行网络编程的相关函数 是Windows下的网络编程接口 Winsock在常见的Windows平台上有两个主要的版本 即Winsock1和Winsock2 编写与Winsock1兼容
  • vue3使用Element-plus与TS(TypeScript)

    如果你有一个困扰就是为什么直接CV Element plus文档里的代码总是报各种错误 那你看这篇就对啦 针对Vue3哦 1 项目导入vscode后 安装Element plus npm install element plus save
  • Unreal Engine(虚幻引擎)渲染 – 正确使用方法

    我们已经讨论过 Unreal Engine 虚幻引擎 中可用的很多神奇工具 包括最近抢先体验的 Unreal Engine 5 多亏了 Epic 世界各地的开发人员和团队都可以轻松进行游戏开发 Epic 对电影和游戏界的最大贡献可能就是 U
  • 解决 iframe跨域、跨端口报错 Blocked a frame with origin from accessing a cross-origin frame

    前言 在不同的端口号 甚至是不同的ip进行iframe嵌套的时候 在父页面调用子页面的方法的时候 报错 SecurityError Blocked a frame with origin from accessing a cross ori
  • 深度学习环境配置 Ubuntu 18.04 + Anaconda + CUDA + Cudnn + Pytorch 【亲测可用】

    这套环境实在是太复杂坑太多 配了大半年 今天终于终于成功了 显卡驱动 直接用软件和更新安装470版本显卡驱动 出错几率最小 查看安装状态 nvidia smi 会出现显卡版本和CUDA支持 CUDA 首先感谢二位前辈的原贴 https bl
  • qt小笔记

    自己备忘的常见的qt小知识点 知识点 文件判断是否存在 可读 可写 可编辑 QString转成char 接上面 c str和 data 区别 1 拼接 2 格式化 3 数字转字符串 文版框输出数字转字符串函数QString number a
  • VGA系列之一:VGA显示器驱动篇

    在这周里边 学习的内容包括两个主要的部分 UART通信和VGA显示器 串口通信是这周的前半周讲的 下半周讲的是VGA 在我们的这篇文章中 先来讲下VGA 当然在VGA实验中 我们暂时只做了5个小实验 1 显示器显示3栏颜色 2 在第一个的基
  • iOS-加密算法

    一 散列算法 签名算法 摘要 散列算法 又称哈希函数 是一种单向加密算法 在信息安全技术中 经常需要验证消息的完整性 散列 Hash 函数提供了这一服务 它对不同长度的输入消息 产生固定长度的输出 因为其结果是不可逆的 既然是不可逆的 那么