如果您想了解php–SVN在Windows和Linux机器上通过Web表单更新的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于JavaPhantomjs在windows和linux中表现不
如果您想了解php – SVN在Windows和Linux机器上通过Web表单更新的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于Java Phantomjs在windows和linux中表现不同、Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同、JDK在windows和linux中安装配置指南、Linux svn仓库备份到Windows机器上的有价值的信息。
本文目录一览:- php – SVN在Windows和Linux机器上通过Web表单更新
- Java Phantomjs在windows和linux中表现不同
- Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同
- JDK在windows和linux中安装配置指南
- Linux svn仓库备份到Windows机器上
php – SVN在Windows和Linux机器上通过Web表单更新
我一直在这方面工作,我找不到解决方案(如果有的话).
所以问题是:有没有办法通过HTML Web表单执行svn更新请求?
我已经测试了多个基于Web的SVN客户端(包括构建我自己的),但他们都无法进行更新.
我理解这是PHP使用的用户权限的问题,但即使我将系统上的所有文件都设置为777(在虚拟机上尝试过),我也无法将其归档.
有人有这方面的经验吗?
谢谢你.
我还浏览了所有目录并将所有者设置为Everyone并具有完全访问权限.现在不存在许可问题……我想.
最后编辑:
如果脚本文件不在svn目录的根目录中,我似乎无法执行SVN.最终的代码现在看起来像这样:http://codepad.org/Kb2K8e6m
解决方法:
以下功能应该或多或少地为您做.它还打印出来:
>它在shell中执行的确切命令
>命令的输出(包括错误),以便它也可以被调试.
function updatesvn() {
if ( isset($_POST) ) {
//Get svn username and password from request parameters
$username = <your_svn_username>;
$password = <your_svn_password>;
//Get version number to move to
$values = $_POST;
$version = $values['revision'];
//validate version number
//Path where you have checked out your project
$rpath = '/var/www/myproj';
//Command to svn update
$cmd = "cd $rpath; svn cleanup; svn --non-interactive --username $username --password $password update -r $version 2>&1";
echo $cmd;
$out = shell_exec($cmd);
echo $out;
}
}
编辑:谨防此代码中的安全漏洞.我在这里简化了它.我们在其中一个应用程序中使用了它,其中达到此点的用户已预先通过身份验证,成为Web应用程序的管理员用户.此外,此代码在MVC框架中执行,其中输入的验证在中央位置完成,然后在控制器中执行操作.
Java Phantomjs在windows和linux中表现不同
我使用 java和phantomjs制作了一个程序,理论上它们都应该以相同的方式运行.
pc和服务器中的Phantomjs是相同的v.2.0.
在Windows(v.7)中,mi测试程序按预期工作,但在linux(debian)中,程序失败,当它尝试单击一个元素时出现此错误:
Caused by: org.openqa.selenium.NoSuchElementException: {"errorMessage":"Unable to find element with css selector
现在,我知道有时候我们必须等待几秒才能加载页面,这已经做了(甚至还添加了一些以确保)并且它已在Windows中正确测试.
我试过点击功能:
element.click();
使用javascript代码:
JavascriptExecutor js = (JavascriptExecutor)driver; js = (JavascriptExecutor)driver; js.executeScript("arguments[0].click();",element)
并采取行动:
Actions action = new Actions(driver); action.movetoElement(element).contextClick().build().perform(); //and this code too action.movetoElement(element).click().build().perform();
有人有同样或类似的问题吗?我还能做什么?我从昨天起就陷入了困境,我无法弄清楚这个问题.
注意:现在我有另一种方法来获取页面而不进行交互,但在不同的操作系统中执行时仍然会从网页获得不同的结果,例如:
通常我得到这个链接:www.somesite.com/?search = xxxxx& date_in = dd / MM / yyyy& params = etc.相反,我得到www.somesite.com/?search=xxxxx,默认搜索没有任何特定的搜索参数.
解决方法
您还需要使用以下 Command-Line选项:
--ignore-ssl-errors=true --ssl-protocol=any --debug=true
另见:this issue.
Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同
一)什么是AES?
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
那么为什么原来的DES会被取代呢,,原因就在于其使用56位密钥,比较容易被破解。而AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据,相对来说安全很多。完善的加密算法在理论上是无法破解的,除非使用穷尽法。使用穷尽法破解密钥长度在128位以上的加密数据是不现实的,仅存在理论上的可能性。统计显示,即使使用目前世界上运算速度最快的计算机,穷尽128位密钥也要花上几十亿年的时间,更不用说去破解采用256位密钥长度的AES算法了。
目前世界上还有组织在研究如何攻破AES这堵坚厚的墙,但是因为破解时间太长,AES得到保障,但是所用的时间不断缩小。随着计算机计算速度的增快,新算法的出现,AES遭到的攻击只会越来越猛烈,不会停止的。
AES现在广泛用于金融财务、在线交易、无线通信、数字存储等领域,经受了最严格的考验,但说不定哪天就会步DES的后尘。
二)AES加密解密 以下为window下的源码:(注意 如果在linux或者mac电脑上执行 ,是不对的)
package demo.security;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Scanner;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/*
* AES对称加密和解密
*/
public class SymmetricEncoder {
/*
* 加密
* 1.构造密钥生成器
* 2.根据ecnodeRules规则初始化密钥生成器
* 3.产生密钥
* 4.创建和初始化密码器
* 5.内容加密
* 6.返回字符串
*/
public static String AESEncode(String encodeRules,String content){
try {
//1.构造密钥生成器,指定为AES算法,不区分大小写
KeyGenerator keygen=KeyGenerator.getInstance("AES");
//2.根据ecnodeRules规则初始化密钥生成器
//生成一个128位的随机源,根据传入的字节数组
keygen.init(128, new SecureRandom(encodeRules.getBytes()));
//3.产生原始对称密钥
SecretKey original_key=keygen.generateKey();
//4.获得原始对称密钥的字节数组
byte [] raw=original_key.getEncoded();
//5.根据字节数组生成AES密钥
SecretKey key=new SecretKeySpec(raw, "AES");
//6.根据指定算法AES自成密码器
Cipher cipher=Cipher.getInstance("AES");
//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY
cipher.init(Cipher.ENCRYPT_MODE, key);
//8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
byte [] byte_encode=content.getBytes("utf-8");
//9.根据密码器的初始化方式--加密:将数据加密
byte [] byte_AES=cipher.doFinal(byte_encode);
//10.将加密后的数据转换为字符串
//这里用Base64Encoder中会找不到包
//解决办法:
//在项目的Build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。
String AES_encode=new String(new BASE64Encoder().encode(byte_AES));
//11.将字符串返回
return AES_encode;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//如果有错就返加nulll
return null;
}
/*
* 解密
* 解密过程:
* 1.同加密1-4步
* 2.将加密后的字符串反纺成byte[]数组
* 3.将加密内容解密
*/
public static String AESDncode(String encodeRules,String content){
try {
//1.构造密钥生成器,指定为AES算法,不区分大小写
KeyGenerator keygen=KeyGenerator.getInstance("AES");
//2.根据ecnodeRules规则初始化密钥生成器
//生成一个128位的随机源,根据传入的字节数组
keygen.init(128, new SecureRandom(encodeRules.getBytes()));
//3.产生原始对称密钥
SecretKey original_key=keygen.generateKey();
//4.获得原始对称密钥的字节数组
byte [] raw=original_key.getEncoded();
//5.根据字节数组生成AES密钥
SecretKey key=new SecretKeySpec(raw, "AES");
//6.根据指定算法AES自成密码器
Cipher cipher=Cipher.getInstance("AES");
//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEY
cipher.init(Cipher.DECRYPT_MODE, key);
//8.将加密并编码后的内容解码成字节数组
byte [] byte_content= new BASE64Decoder().decodeBuffer(content);
/*
* 解密
*/
byte [] byte_decode=cipher.doFinal(byte_content);
String AES_decode=new String(byte_decode,"utf-8");
return AES_decode;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
//如果有错就返加nulll
return null;
}
public static void main(String[] args) {
SymmetricEncoder se=new SymmetricEncoder();
Scanner scanner=new Scanner(System.in);
/*
* 加密
*/
System.out.println("使用AES对称加密,请输入加密的规则");
String encodeRules=scanner.next();
System.out.println("请输入要加密的内容:");
String content = scanner.next();
System.out.println("根据输入的规则"+encodeRules+"加密后的密文是:"+se.AESEncode(encodeRules, content));
/*
* 解密
*/
System.out.println("使用AES对称解密,请输入加密的规则:(须与加密相同)");
encodeRules=scanner.next();
System.out.println("请输入要解密的内容(密文):");
content = scanner.next();
System.out.println("根据输入的规则"+encodeRules+"解密后的明文是:"+se.AESDncode(encodeRules, content));
}
}
三)测试结果
使用AES对称加密,请输入加密的规则
使用AES对称加密
请输入要加密的内容:
使用AES对称加密
根据输入的规则使用AES对称加密加密后的密文是:Z0NwrNPHghgXHN0CqjLS58YCjhMcBfeR33RWs7Lw+AY=
使用AES对称解密,请输入加密的规则:(须与加密相同)
使用AES对称加密
请输入要解密的内容(密文):
Z0NwrNPHghgXHN0CqjLS58YCjhMcBfeR33RWs7Lw+AY=
根据输入的规则使用AES对称加密解密后的明文是:使用AES对称加密
二、如果在window上面执行上面的代码是正确的,但是如果在linux或者mac上执行,就会报错:
javax.crypto.BadPaddingException: Given final block not properly padded
经过一番调试,找到真正原因:javax.crypto.BadPaddingException: Given final block not properly padded
package com.daredo.utils;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
/**
* Created by IntelliJ IDEA
* Author: d-arlin@qq.com
* Date: 2018/3/14
* Time: 15:38
*/
public class SecurityUtils {
/**
* 编码格式
*/
private static String ENCODING = "UTF-8";
/**
* 加密算法
*/
public static final String KEY_ALGORITHM = "AES";
/**
* 加密
*
* @param content 待加密内容
* @param key 加密的密钥
* @return
*/
public static String encrypt(String content, String key) {
try {
KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
kgen.init(128, new SecureRandom(key.getBytes(ENCODING)));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
byte[] byteContent = content.getBytes(ENCODING);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] byteRresult = cipher.doFinal(byteContent);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteRresult.length; i++) {
String hex = Integer.toHexString(byteRresult[i] & 0xFF);
if (hex.length() == 1) hex = ''0'' + hex;
sb.append(hex.toUpperCase());
}
return sb.toString();
} catch (Exception e) {
e.toString();
}
return null;
}
/**
* 解密
*
* @param content 待解密内容
* @param key 解密的密钥
* @return
*/
public static String decrypt(String content, String key) {
if (content.length() < 1) return null;
byte[] byteRresult = new byte[content.length() / 2];
for (int i = 0; i < content.length() / 2; i++) {
int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
byteRresult[i] = (byte) (high * 16 + low);
}
try {
KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
kgen.init(128, new SecureRandom(key.getBytes(ENCODING)));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] result = cipher.doFinal(byteRresult);
return new String(result, ENCODING);
} catch (Exception e) {
e.toString();
}
return null;
}
}
那么为什么在Windows正常,在Linux就出现异常呢?
原因分析
SecureRandom 实现完全随操作系统本身的內部状态,除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法;
该实现在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系统上则不同。
解决方法
package com.daredo.utils;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
/**
* Created by IntelliJ IDEA
* Author: d-arlin@qq.com
* Date: 2018/3/14
* Time: 15:38
*/
public class SecurityUtils {
/**
* 编码格式
*/
private static final String ENCODING = "UTF-8";
/**
* 加密算法
*/
public static final String KEY_ALGORITHM = "AES";
/**
* 签名算法
*/
public static final String SIGN_ALGORITHMS = "SHA1PRNG";
/**
* 加密
*
* @param content 待加密内容
* @param key 加密的密钥
* @return
*/
public static String encrypt(String content, String key) {
try {
KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
SecureRandom random = SecureRandom.getInstance(SIGN_ALGORITHMS);
random.setSeed(key.getBytes(ENCODING));
kgen.init(128, random);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
byte[] byteContent = content.getBytes(ENCODING);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] byteRresult = cipher.doFinal(byteContent);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteRresult.length; i++) {
String hex = Integer.toHexString(byteRresult[i] & 0xFF);
if (hex.length() == 1) hex = ''0'' + hex;
sb.append(hex.toUpperCase());
}
return sb.toString();
} catch (Exception e) {
e.toString();
}
return null;
}
/**
* 解密
*
* @param content 待解密内容
* @param key 解密的密钥
* @return
*/
public static String decrypt(String content, String key) {
if (content.length() < 1) return null;
byte[] byteRresult = new byte[content.length() / 2];
for (int i = 0; i < content.length() / 2; i++) {
int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
byteRresult[i] = (byte) (high * 16 + low);
}
try {
KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
SecureRandom random = SecureRandom.getInstance(SIGN_ALGORITHMS);
random.setSeed(key.getBytes(ENCODING));
kgen.init(128, random);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] result = cipher.doFinal(byteRresult);
return new String(result, ENCODING);
} catch (Exception e) {
e.toString();
}
return null;
}
}
改动的地方如代码中已标红。
参考:javax.crypto.BadPaddingException: Given final block not properly padded
参考:Java实现AES加密
JDK在windows和linux中安装配置指南
1 Windows下安装、配置jdk
1.1 准备工作
到http://pan.baidu.com/s/1i3l6MDR下载
jdk-7u55-windows-x64.exe
1.2 安装
双击运行jdk-7u55-windows-x64.exe
1.3 配置环境变量
新建JAVA_HOME变量,值为 C:\JAVA\jdk1.7.0_55
在Path变量最后追加: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
新建CLASSPATH变量,值为 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
1.4 验证
在cmd中,执行命令:
java –version
至此,windows版的jdk安装完成
2 Linux下安装、配置jdk
2.1 准备工作
到http://pan.baidu.com/s/1jGzbUN8下载
jdk-7u55-linux-x64.rpm
此处放到/root/source/jdk-7u55-linux-x64.rpm
2.2 安装
运用cd命令,把目录切换到/root/source下
运行命令:
rpm -ivh jdk-7u55-linux-x64.rpm
2.3 配置环境变量
编辑/etc/profile文件
在这个文件最后添加:
JAVA_HOME=/usr/java/jdk1.7.0_55
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export JAVA_HOME PATH CLASSPATH
保存并退出
2.4 验证
注销并重新登录
运行命令:java -version
Linux svn仓库备份到Windows机器上
Linux svn仓库备份到Windows机器上
1,需求说明,Linux作为主库(A),Windows作为本地备份库(B),要求每天将Linux库中的代码备份到本地
2,B机器上安装svn服务端
3,
4,创建一个新的svn仓库(仓库必须是新创建的而且不能有提交,更新等操作)
进入仓库的hooks文件夹,复制pre-revprop-change.tmpl 文件,重命名为pre-revprop-change.bat ,编辑pre-revprop-change.bat文件 删除全部内容,输入exit 0 保存
5、执行同步要使用到两个命令
1、svnsync init
初始化,建立目标库和源库之间的同步关系
命令格式 svnsync init 目标库URL 源库URL
2、svnsync sync
真正的同步
命令格式 svnsync sync 目标库URL
全部操作如下图所示
C:\Users\Administrator>svnsync init file:///E:\lywebsite svn://39.105.111.20/lyw
Ebsite
C:\Users\Administrator>svnsync sync file:///E:\lywebsite
执行svnsync init 时先会让你填写administrator的密码,随便输入就行
接下来输入svn的账号密码
最后执行svnsync sync ,这一步有可能也会让你输入用户名密码
可使用下面的格式,带上用户名和密码
svnsync sync file:///svn/proj1 –username username –password password
问题:
1. Repository has not been enabled to accept revision propchanges
解决方法:
Linux:
在hooks下新建pre-revprop-change文件,内容是
#!/bin/sh
exit 0;
Windows:
在hooks下新建pre-revprop-change.bat文件, 内容为空即可
2. Revprop change blocked by pre-revprop-change hook (exit code 255) with no output
解决方法:
Linux:
chmod a+x pre-revprop-change
3,svnsync: Destination HEAD (593) is not the last merged revision (592);
have you committed to the destination without using svnsync?
解决方法
svn propset --revprop -r0 svn:sync-last-merged-revision 593 file:///home/test/svn/test
今天关于php – SVN在Windows和Linux机器上通过Web表单更新的分享就到这里,希望大家有所收获,若想了解更多关于Java Phantomjs在windows和linux中表现不同、Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同、JDK在windows和linux中安装配置指南、Linux svn仓库备份到Windows机器上等相关知识,可以在本站进行查询。
本文标签: