搜索词>>Nexus3������������ 耗时0.0170
  • java c++通用DES/AES对称加密算法(包含源代码)

    java c++通用DES加密算法(包含源代码),本来觉得DES、AES这种流行加密算法,使用起来应该很简单。但研究后发现有两个变数:1分块的方式。加密是逐块进行的。2.padding的方式。当数据的位数不及块的大小时,需要填充。<h2>一说明</h2> 本来觉得DES、AES这种流行加密算法,使用起来应该很简单。但研究后发现有两个变数: <ul> <li>分块的方式。加密是逐块进行的。分块方法有:CBC、ECB、CFB……</li> <li>padding的方式。当数据的位数不及块的大小时,需要填充。填充方式有:NoPadding、PKCS5Padding……</li> </ul> 如果加解密端采用不同的分块方式或padding方式,即使都是采用DES/AES算法,同样无法解密成功。上次需要C端和Java端进行密文传输,就跪在这一点上(那时候没时间研究)。<br /> 参考文章:<a href="http://my.oschina.net/u/267094/blog/174035" rel="external nofollow" target="_blank">Java AES算法和openssl配对</a> ,主要通过其了解openssl里比较高级的EVP系列API(其默认padding和java一样都是PKCS5Padding),节约了搜索时间。<br /> 贴代码了,以下代码测试通过了。Java和C++均可以正确解密对方的密文。<br /> 约定:分块和padding采用Java默认的 ECB + PKCS5Padding。 <h2>二 DES加解密</h2> <h3>Java端DES加解密</h3> <pre> <code class="language-java">import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class DESUtil { /** 默认算法格式 **/ static String default_transformation = "DES/ECB/PKCS5Padding"; /** * 根据key获取加密器 * * @param keyData * key 8byte * @return 加密器 * @throws Exception * 异常 */ private static Cipher getEncryptCipher(byte[] keyData) throws Exception { if (keyData.length != 8) { throw new Exception("Key Data Must 8 byte!"); } SecretKeySpec key = new SecretKeySpec(keyData, "DES"); // 指定分块ECB模式,填充PKCS5Padding模式 Cipher encryptCipher = Cipher.getInstance(default_transformation); // 初始化加密的容器 encryptCipher.init(Cipher.ENCRYPT_MODE, key); return encryptCipher; } /** * 根据key获取解码器 * * @return 解码器 * @throws Exception * 异常 */ private static Cipher getDecryptCipher(byte[] keyData) throws Exception { if (keyData.length != 8) { throw new Exception("Key Data Must 8 byte!"); } SecretKeySpec key = new SecretKeySpec(keyData, "DES"); Cipher decryptCipher = Cipher.getInstance(default_transformation); // 初始化解密的容器 decryptCipher.init(Cipher.DECRYPT_MODE, key); return decryptCipher; } /** * DES加密 * * @param data * 待加密数据 * @param keyData * key值 * @return 加密后的数据 * @throws Exception * 异常 */ public static byte[] encrypt(byte[] data, byte[] keyData) throws Exception { return getEncryptCipher(keyData).doFinal(data); } /** * DES解密 * * @param data * 加密后的数据 * * @param keyData * key值 * @return 解密数据 * @throws Exception * 异常 */ public static byte[] decrypt(byte[] data, byte[] keyData) throws Exception { return getDecryptCipher(keyData).doFinal(data); } /** * 测试 * * @param args */ public static void main(String[] args) { try { byte[] data = "测试123456".getBytes(); byte[] keyData = "12345678".getBytes(); System.out.println("原文:" + new String(data)); byte[] enData = encrypt(data, keyData); System.out.println("加密后:" + new String(enData)); byte[] deData = decrypt(enData, keyData); System.out.println("解密后:" + new String(deData)); } catch (Exception e) { e.printStackTrace(); } } } </code></pre> <strong><span style="color:#27ae60">说明:Java必须指定填充模式和padding模式。DES/ECB/PKCS5Padding,好与C++同步</span></strong><br /> 测试执行结果: <pre> <code class="language-html">原文:测试123456 加密后:�a���O���?I�]�Y 解密后:测试123456</code></pre> <h3>C++端DES加解密</h3> c++DES加密代码 <pre> <code class="language-cpp">#include <string> #include <iostream> #include <stdio.h> #include <assert.h> #include <openssl/objects.h> #include <openssl/evp.h> // 注意:参数和返回值全部是二进制数据 std::string desEncrypt(const std::string& source, const std::string& key) {     EVP_CIPHER_CTX ctx;     EVP_CIPHER_CTX_init(&ctx);     int ret = EVP_EncryptInit_ex(&ctx, EVP_des_ecb(), NULL, (const unsigned char*)key.data(), NULL);     assert(ret == 1);     unsigned char* result = new unsigned char[source.length() + 64]; // 弄个足够大的空间     int len1 = 0;     ret = EVP_EncryptUpdate(&ctx, result, &len1, (const unsigned char*)source.data(), source.length());     assert(ret == 1);     int len2 = 0;     ret = EVP_EncryptFinal_ex(&ctx, result+len1, &len2);      assert(ret == 1);     std::cout << len1 << "," << len2 << std::endl;     ret = EVP_CIPHER_CTX_cleanup(&ctx);     assert(ret == 1);     std::string res((char*)result, len1+len2);     delete[] result;     return res; } int main() {     std::string key("hellodes", 8);    // 二进制数据,而不是以0结尾的字符串     // 读取文件内容(简单起见认为文件内容<100K)     char buf[1024*100];     FILE* fp = fopen("src.txt", "rb");     int bytes = fread(buf, 1, 1024*100, fp);     fclose(fp);     std::string source(buf, bytes); // 二进制数据     // 加密     std::string enc = desEncrypt(source, key);     std::cout << "desEncrypt:" << source.length() << "->" << enc.length() << std::endl;     // 输出到文件     fp =  fopen("enc.bin", "wb");     fwrite(enc.data(), 1, enc.length(), fp);     fclose(fp); }</code></pre> c++DES解密 <pre> <code class="language-cpp">#include <string> #include <iostream> #include <stdio.h> #include <assert.h> #include <openssl/objects.h> #include <openssl/evp.h> // 注意:参数和返回值全部是二进制数据 std::string desDecrypt(const std::string& ciphertext, const std::string& key) {     EVP_CIPHER_CTX ctx;     EVP_CIPHER_CTX_init(&ctx);     int ret = EVP_DecryptInit_ex(&ctx, EVP_des_ecb(), NULL, (const unsigned char*)key.data(), NULL);     assert(ret == 1);     unsigned char* result = new unsigned char[ciphertext.length() + 64]; // 弄个足够大的空间     int len1 = 0;     ret = EVP_DecryptUpdate(&ctx, result, &len1, (const unsigned char*)ciphertext.data(), ciphertext.length());     assert(ret == 1);     int len2 = 0;     ret = EVP_DecryptFinal_ex(&ctx, result+len1, &len2);      assert(ret == 1);     std::cout << len1 << "," << len2 << std::endl;     ret = EVP_CIPHER_CTX_cleanup(&ctx);     assert(ret == 1);     std::string res((char*)result, len1+len2);     delete[] result;     return res; } int main() {     std::string key("hellodes", 8);    // 二进制数据,而不是以0结尾的字符串     // 读取文件内容(简单起见认为文件内容<100K)     char buf[1024*100];     FILE* fp = fopen("enc.bin", "rb");     int bytes = fread(buf, 1, 1024*100, fp);     fclose(fp);     std::string data(buf, bytes); // 二进制数据     // 加密     std::string dec = desDecrypt(data, key);     std::cout << "desDecrypt:" << data.length() << "->" << dec.length() << std::endl;     // 输出到文件     fp =  fopen("dec.txt", "wb");     fwrite(dec.data(), 1, dec.length(), fp);     fclose(fp); }</code></pre> <br /> 说明:DES、AES加密算法都是针对数据块,Java加解密函数参数使用byte数组。C++用std::string,那是因为这是C++中使用byte数组的最简单方式(std::string可以存储二进制数据,很多人没想到吧),缺点是拷贝内存的次数可能会略多些。如果想要优化拷贝效率,可以使用自己封装的Buffer类来代替std::string。 <h2>三 AES加解密</h2> <h3>Java端AES加解密</h3> <pre> <code class="language-java">import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; /** * DES加解密算法工具类 * * @author xqlee * */ public class AESUtil { /** 默认算法格式 **/ static String default_transformation = "AES/ECB/PKCS5Padding"; /** * 根据key获取加密器 * * @param keyData * key 8byte * @return 加密器 * @throws Exception * 异常 */ private static Cipher getEncryptCipher(byte[] keyData) throws Exception { if (keyData.length != 16) { throw new Exception("Key Data Must 8 byte!"); } SecretKeySpec key = new SecretKeySpec(keyData, "AES"); // 指定分块ECB模式,填充PKCS5Padding模式 Cipher encryptCipher = Cipher.getInstance(default_transformation); // 初始化加密的容器 encryptCipher.init(Cipher.ENCRYPT_MODE, key); return encryptCipher; } /** * 根据key获取解码器 * * @return 解码器 * @throws Exception * 异常 */ private static Cipher getDecryptCipher(byte[] keyData) throws Exception { if (keyData.length != 16) { throw new Exception("Key Data Must 8 byte!"); } SecretKeySpec key = new SecretKeySpec(keyData, "AES"); Cipher decryptCipher = Cipher.getInstance(default_transformation); // 初始化解密的容器 decryptCipher.init(Cipher.DECRYPT_MODE, key); return decryptCipher; } /** * AES加密 * * @param data * 待加密数据 * @param keyData * key值 * @return 加密后的数据 * @throws Exception * 异常 */ public static byte[] encrypt(byte[] data, byte[] keyData) throws Exception { return getEncryptCipher(keyData).doFinal(data); } /** * AES解密 * * @param data * 加密后的数据 * * @param keyData * key值 * @return 解密数据 * @throws Exception * 异常 */ public static byte[] decrypt(byte[] data, byte[] keyData) throws Exception { return getDecryptCipher(keyData).doFinal(data); } /** * 测试 * * @param args */ public static void main(String[] args) { try { byte[] data = "测试123456".getBytes(); byte[] keyData = "1234567887654321".getBytes(); System.out.println("原文:" + new String(data)); byte[] enData = encrypt(data, keyData); System.out.println("加密后:" + new String(enData)); byte[] deData = decrypt(enData, keyData); System.out.println("解密后:" + new String(deData)); } catch (Exception e) { e.printStackTrace(); } } } </code></pre> <h3>C++端AES加解密</h3> 加密: <pre> <code class="language-cpp">#include <string> #include <iostream> #include <stdio.h> #include <assert.h> #include <openssl/objects.h> #include <openssl/evp.h> // 注意:参数和返回值全部是二进制数据 std::string aesEncrypt(const std::string& source, const std::string& key) {     EVP_CIPHER_CTX ctx;     EVP_CIPHER_CTX_init(&ctx);     int ret = EVP_EncryptInit_ex(&ctx, EVP_aes_128_ecb(), NULL, (const unsigned char*)key.data(), NULL);     assert(ret == 1);     unsigned char* result = new unsigned char[source.length() + 64]; // 弄个足够大的空间     int len1 = 0;     ret = EVP_EncryptUpdate(&ctx, result, &len1, (const unsigned char*)source.data(), source.length());     assert(ret == 1);     int len2 = 0;     ret = EVP_EncryptFinal_ex(&ctx, result+len1, &len2);      assert(ret == 1);     std::cout << len1 << "," << len2 << std::endl;     ret = EVP_CIPHER_CTX_cleanup(&ctx);     assert(ret == 1);     std::string res((char*)result, len1+len2);     delete[] result;     return res; } int main() {     std::string key("helloaeshelloaes", 16);    // 二进制数据,而不是以0结尾的字符串     // 读取文件内容(简单起见认为文件内容<100K)     char buf[1024*100];     FILE* fp = fopen("src.txt", "rb");     int bytes = fread(buf, 1, 1024*100, fp);     fclose(fp);     std::string source(buf, bytes); // 二进制数据     // 加密     std::string enc = aesEncrypt(source, key);     std::cout << "aesEncrypt:" << source.length() << "->" << enc.length() << std::endl;     // 输出到文件     fp =  fopen("enc.bin", "wb");     fwrite(enc.data(), 1, enc.length(), fp);     fclose(fp); }</code></pre> 解密: <pre> <code class="language-cpp">#include <string> #include <iostream> #include <stdio.h> #include <assert.h> #include <openssl/objects.h> #include <openssl/evp.h> // 注意:参数和返回值全部是二进制数据 std::string aesDecrypt(const std::string& ciphertext, const std::string& key) {     EVP_CIPHER_CTX ctx;     EVP_CIPHER_CTX_init(&ctx);     int ret = EVP_DecryptInit_ex(&ctx, EVP_aes_128_ecb(), NULL, (const unsigned char*)key.data(), NULL);     assert(ret == 1);     unsigned char* result = new unsigned char[ciphertext.length() + 64]; // 弄个足够大的空间     int len1 = 0;     ret = EVP_DecryptUpdate(&ctx, result, &len1, (const unsigned char*)ciphertext.data(), ciphertext.length());     assert(ret == 1);     int len2 = 0;     ret = EVP_DecryptFinal_ex(&ctx, result+len1, &len2);      assert(ret == 1);     std::cout << len1 << "," << len2 << std::endl;     ret = EVP_CIPHER_CTX_cleanup(&ctx);     assert(ret == 1);     std::string res((char*)result, len1+len2);     delete[] result;     return res; } int main() {     std::string key("helloaeshelloaes", 16);    // 二进制数据,而不是以0结尾的字符串     // 读取文件内容(简单起见认为文件内容<100K)     char buf[1024*100];     FILE* fp = fopen("enc.bin", "rb");     int bytes = fread(buf, 1, 1024*100, fp);     fclose(fp);     std::string data(buf, bytes); // 二进制数据     // 加密     std::string dec = aesDecrypt(data, key);     std::cout << "aesDecrypt:" << data.length() << "->" << dec.length() << std::endl;     // 输出到文件     fp =  fopen("dec.txt", "wb");     fwrite(dec.data(), 1, dec.length(), fp);     fclose(fp); }</code></pre>
  • nexus3.x 上传jar包图文详细介绍_nexus3创建仓库Repository

    一、登录nexus​登录nexus3二、创建本地仓库(Repository)​nexus创建本地仓库点击Create repository,然后选择仓库类型为maven3(hosted)​nexus本地仓库创建类型选择填写仓库名称,例如这里一、登录nexus​登录nexus3二、创建本地仓库(Repository)​nexus创建本地仓库点击Create repository,然后选择仓库类型为maven3(hosted)​nexus本地仓库创建类型选择填写仓库名称,例如这里的maven-my​仓库名称 设置Hosted默认是Disable redeploy也就是禁用,改为启用​最后点击 Create respository按钮创建完毕,其他配置暂时默认不改​三、将创建的本地库添加入maven-public组库里面  ​点开maven-public库 将上面创建的maven-my仓库添加到maven-public组仓库中​添加本地库到公共库组 将maven-my添加到组库中,并点击^按钮将优先级调高 ​将maven-my添加到组库中,并点击^按钮将优先级调高 点击Save保存操作。四、创建一个demo的项目并打jar包 这里创建了一个spring boot的jar项目​demo项目很简单,就是用idea创建了一个项目,其他啥代码也没写,开始打包,注意这里打包请使用install不要使用package,因为package打包不会生成pom,pom在后续引入该jar有重要作用​demo项目就已经准备就绪了五、上传jar到nexus 默认条件,保持登录状态上传选择自己创建的本地库,如下图​上传jar库选择 jar上传界面​注意:之前install的jar和pom在计算机本地的maven仓库中,maven默认是在C:/users/你的用户名/.m2/repository找到本地仓库后再继续找包,包路径其实就是创建demo项目时候的group id  com.example,则是在com/example下由于我改了默认的maven仓库路径,我的仓库路径为D:/maven_res,所以刚才的demo在:D:/maven_res/com/example其实看路径还有个地方。就是打包的时候,会显示路径,如下图:​好了开始点击nexus的上传按钮了先上传jar文件​jar文件选择 然后依次填写下面的信息​最后点击upload按钮上传上传pom文件​pom文件上传不用填写信息​点击upload上传六、查看上传的jar信息 ​可以看到jar和pom都已经存在了​七、使用 ​​​
  • Nexus3.X忘记admin密码找回

    一、问题背景nexus3 这种东西,传完一次,很少动了,很容易忘记密码,不要急有方法找回一、问题背景nexus3 这种东西,传完一次,很少动了,很容易忘记密码,不要急有方法找回。官方网站关于解决该问题的方法:https://support.sonatype.com/hc/en-us/articles/213467158-How-to-reset-a-forgotten-admin-password-in-Nexus-3-x​二、解决2.1 第一步:停止服务将nexus停止运行./nexus stop2.2 第二步:进入OrientDB控制台进入nexus的安装目录下:博主本人安装目录在:[018@localhost ~]$ ll /application/nexus/ 总用量 72 drwxr-xr-x. 3 018 018 73 5月 14 00:10 bin drwxr-xr-x. 2 018 018 26 5月 14 00:06 deploy drwxr-xr-x. 7 018 018 104 5月 14 00:06 etc drwxr-xr-x. 4 018 018 184 5月 14 00:06 lib -rw-r--r--. 1 018 018 395 7月 12 2018 NOTICE.txt -rw-r--r--. 1 018 018 17321 7月 12 2018 OSS-LICENSE.txt -rw-r--r--. 1 018 018 39222 7月 12 2018 PRO-LICENSE.txt drwxr-xr-x. 3 018 018 4096 5月 14 00:06 public drwxr-xr-x. 22 018 018 4096 5月 24 15:40 system 进入该目录下:[018@localhost nexus]$ cd /application/nexus/ Linux、Windows、Mac有不同的进入方法,方法如下:#linux: java -jar ./lib/support/nexus-orient-console.jar #win: java -jar lib\support\nexus-orient-console.jar #mac: .install4j/jre.bundle/Contents/Home/jre/bin/java -jar ./lib/support/nexus-orient-console.jar 2.3 第三步:进入数据库connect plocal:../sonatype-work/nexus3/db/security admin admin 2.4 第四步:重置密码此处我们将admin用户密码重置为admin123,具体执行如下:update user SET password="$shiro1$SHA-512$1024$NE+wqQq/TmjZMvfI7ENh/g==$V4yPw8T64UQ6GfJfxYq2hLsVrBY8D1v+bktfOxGdt4b/9BthpWPNUy/CBk6V9iA0nHpzYzJFWO8v/tZFtES8CA==" UPSERT WHERE id="admin" 2.5 第五步:启动服务./nexus start 图像 小部件
  • nexus3创建角色以及用户

    一、admin登录到nexus3​admin登录到nexus3提示:这里密码当然是输入自己的哈二、创建某个库的管理员角色 下面将创建maven-my这个私有本地库的管理员角色​创建仓库maven-my的管理员角色提示:如果需要再web页面操一、admin登录到nexus3​admin登录到nexus3提示:这里密码当然是输入自己的哈二、创建某个库的管理员角色 下面将创建maven-my这个私有本地库的管理员角色​创建仓库maven-my的管理员角色提示:如果需要再web页面操作组件上传等,需要一个组件权限,如下图所示:​有了上面的权限就可以web页面操作管理jar包了:​​三、创建某个私有库的管理员账号 下面根据上面创建的maven-my管理员角色创建maven-my的管理员账号​maven-my管理员账号创建好啦到这里就完成了nexus3的角色与账号创建。 图像 小部件
  • nexus3 通过pom.xml配置上传jar包

    一、maven私服上传自建的jar之项目的pom.xml文件配置 <repositories>l;<--私服下载配置-->l; <repository>l; <id>l;repos</id>l; <name>l;Repository</nam一、maven私服上传自建的jar之项目的pom.xml文件配置 <repositories><--私服下载配置--> <repository> <id>repos</id> <name>Repository</name> <url>http://your.ip:port/repository/maven-public/</url> </repository> </repositories> <distributionManagement><!--私有库上传--> <repository> <id>test-my</id><!--仓库ID,必须与maven 的setting.xml配置文件中server配置xml那个ID一致--> <name>my private maven</name><!--仓库描述--> <url>http://your.ip:port/repository/maven-my/</url><!--上传的仓库地址--> </repository> </distributionManagement> 上方配置说明点注意:<id>test-my</id> 这里的ID必须与maven的配置文件setting.xml中的server配置密码节点的ID一致。上传私有库的id必须唯一,后续会用到url地址为nexus私服库的路径,可在nexus管理界面进行复制,很多人默认使用的http://192.168.1.221:8081/repository/maven-releases 或者http://192.168.1.221:8081/repository/maven-snapshots 但是我这里使用的是自己创建的maven-my库。具体情况请跟进你的需求来定。 二、maven私服上传自建的jar之本地maven setting.xml文件配置 用过maven的同学都知道,maven有个重要的配置文件setting.xml。默认情况下,windows操作系统该文件存放路径为C:\Users\用户名\.m2\setting.xml编辑setting.xml添加私有库的认证信息。​配置maven setting.xml 配置点在于: <servers> <server> <id>test-my</id> <username>my</username> <password>lw123456==</password> </server> </servers> 注意:id的值test-my需与项目中的上传私有库配置的id一致,否则会出现权限问题。注意:这里的用户my必须要有相应的仓库操作权限三、通过idea deploy上传jar到私服 idea打开maven项目,选择deploy​上传过程:​好了可以网页登录去nexus3看看上传的结果了​有啥问题评论区留言给我​
  • i3 4130/T怎么样_i3 4130跑分

    I3 4130 可以说在2013年风靡一时的CPU,在2019年来看这款CPU怎么样呢?接下来用I3 4130同最近几代I3 6100/I3 7100/I3 8100跑个分试试I3 4130 可以说在2013年风靡一时的CPU,在2019年来看这款CPU怎么样呢?接下来用I3 4130同最近几代I3跑个分试试
  • Intel Core I3 4130对比I3 4130T区别优缺点

    Intel Core I3 4130对比I3 4130T,标准版与节能版区别对比,Intel Core I3 4130对比I3 4130T区别优缺,i3 4130T<h3 style="text-align:center">Intel Core I3 4130对比I3 4130T区别优缺点</h3> <h3><img srcset="" width="" size="" class="img-thumbnail" alt="Intel Core I3 4130对比I3 4130T" src="/assets/upload/blog/thumbnail/2017-05/bd7265cb1619414d90a548e39b87d3da.jpg" /><br /> <br /> Intel Core i3-4130 优点:</h3> <ul> <li>单线程任务处理方面性能高出17%.</li> <li>多线程任务中,性能高出16%.</li> <li>内存集成控制器快9%.</li> <li>图形处理器(集成GPU)性能更好.</li> <li>综合来说I3 4130在价格/性能上都高出I3 4310T大约11%.</li> </ul> <h3>Intel Core i3-4130T 优点:</h3> <ul> <li>比I3 4130节能约35%.</li> <li>CPU运行温度更低,可适度减少噪音污染(带T系列的cpu比较适合长时间开机运行的设备,如家用HTPC,监控,nas网盘等)</li> </ul> <br />  
  • Intel I3 9100 参数 性能 价格

    Intel I3 9100参数详细信息,Intel I3 9100 性能怎么样,Intel I3 9100 参考价格Intel I3 9100参数详细信息,Intel I3 9100 性能怎么样,Intel I3 9100 参考价格
  • I3 9300T 参数 性能

    I3 9300T参数详情,I3 9300T性能参考,I3 9300T价格参考。I3 9300T是上一代I3 8300T的升级产品,具体怎么样,一起来看看吧。I3 9300T是上一代I3 8300T的升级产品,具体怎么样,一起来看看吧。
  • I3 9100T 参数 性能

    I3 9100T参数详情,I3 9100T性能参考,I3 9100T价格参考。I3 9100T是上一代I3 8100T的升级产品,具体怎么样,一起来看看吧。I3 9100T 参数 性能