Generate same 3DES / AES-128 / AES-256 encrypted message with Python / PHP / Java / C# and OpenSSL

2017/6/5 Update: Added C# implement

Triple-DES-ECB (3DES-ECB)

using System;
using System.Text;
using System.Security.Cryptography;
namespace TripleDES
{
class Program
{
private string encrypt(string clearText, string secretKey)
{
try
{
TripleDESCryptoServiceProvider tripleDESProvider = new TripleDESCryptoServiceProvider();
byte[] byteKey = Encoding.UTF8.GetBytes(secretKey.PadRight(24, '\0'));
if(byteKey.Length > 24)
{
byte[] bytePass = new byte[24];
Buffer.BlockCopy(byteKey, 0, bytePass, 0, 24);
byteKey = bytePass;
}
byte[] byteText = Encoding.UTF8.GetBytes(clearText);
tripleDESProvider.Key = byteKey;
tripleDESProvider.Mode = CipherMode.ECB;
byte[] byteMessage = tripleDESProvider.CreateEncryptor().TransformFinalBlock(byteText, 0, byteText.Length);
return Convert.ToBase64String(byteMessage);
}
catch(Exception ex)
{
return ex.Message;
}
}
private string decrypt(string data, string secretKey)
{
try
{
byte[] byteData = Convert.FromBase64String(data);
byte[] byteKey = Encoding.UTF8.GetBytes(secretKey.PadRight(24, '\0'));
if (byteKey.Length > 24)
{
byte[] bytePass = new byte[24];
Buffer.BlockCopy(byteKey, 0, bytePass, 0, 24);
byteKey = bytePass;
}
TripleDESCryptoServiceProvider tripleDESProvider = new TripleDESCryptoServiceProvider();
tripleDESProvider.Key = byteKey;
tripleDESProvider.Mode = CipherMode.ECB;
byte[] byteText = tripleDESProvider.CreateDecryptor().TransformFinalBlock(byteData, 0, byteData.Length);
return Encoding.UTF8.GetString(byteText);
}
catch(Exception ex)
{
return ex.Message;
}
}
static void Main(string[] args)
{
string clearText = "BSプレミアム20日放送";
string secretKey = "SecretKey";
string data = new TripleDES.Program().encrypt(clearText, secretKey);
clearText = new TripleDES.Program().decrypt(data, secretKey);
Console.WriteLine("Encrypted String: " + data);
Console.WriteLine(clearText);
Console.ReadLine();
}
}
}
view raw TripleDES.cs hosted with ❤ by GitHub
#!/usr/bin/env python3
# coding: utf-8
import base64
import pyDes
from Crypto.Cipher import DES3
def encrypt_3des(clear_text, key):
clear_text_byte = clear_text.encode('utf-8')
key_byte = key.encode('utf-8')
key_byte = key_byte.ljust(24, "\0".encode('utf-8'))
if len(key_byte) > 24:
key_byte = key_byte[:24]
k = pyDes.triple_des(key_byte, pyDes.ECB, IV = None, pad = None, padmode = pyDes.PAD_PKCS5)
d = k.encrypt(clear_text_byte)
return base64.b64encode(d).decode('utf-8')
def encrypt_3des_crypto(clear_text, key):
key_byte = key.encode('utf-8')
key_byte = key_byte.ljust(24, "\0".encode('utf-8'))
if len(key_byte) > 24:
key_byte = key_byte[:24]
# PKCS#5
pad_len = 8 - len(clear_text) % 8
padding = chr(pad_len) * pad_len
clear_text += padding
cryptor = DES3.new(key_byte, DES3.MODE_ECB)
data = cryptor.encrypt(clear_text)
return base64.b64encode(data).decode('utf-8')
def decrypt_3des(data, key):
data_byte = base64.b64decode(data.encode('utf-8'))
key_byte = key.encode('utf-8')
key_byte = key_byte.ljust(24, "\0".encode('utf-8'))
if len(key_byte) > 24:
key_byte = key_byte[:24]
k = pyDes.triple_des(key_byte, pyDes.ECB, IV = None, pad = None, padmode = pyDes.PAD_PKCS5)
d = k.decrypt(data_byte)
return d.decode('utf-8')
def decrypt_3des_crypto(data, key):
data_byte = base64.b64decode(data.encode('utf-8'))
key_byte = key.encode('utf-8')
key_byte = key_byte.ljust(24, "\0".encode('utf-8'))
if len(key_byte) > 24:
key_byte = key_byte[:24]
cryptor = DES3.new(key_byte, DES3.MODE_ECB)
c_text = cryptor.decrypt(data_byte)
# PKCS#5
pad_len = ord(c_text.decode('utf-8')[-1])
clear_text = c_text.decode('utf-8')[:-pad_len]
return clear_text
def main():
clear_text = "BSプレミアム20日放送"
key = "SecretKey"
data = encrypt_3des(clear_text, key)
print("Encrypted String: " + data)
print(decrypt_3des(data, key))
data = encrypt_3des_crypto(clear_text, key)
print("Encrypted String: " + data)
print(decrypt_3des_crypto(data, key))
if __name__ == "__main__":
main()
view raw TripleDES.py hosted with ❤ by GitHub
echo -n "BSプレミアム20日放送" | openssl enc -e -des-ede3 -K "5365637265744B6579000000000000000000000000000000" -nosalt -a
echo "tpGP6UtYB5MLZwFG89V+TEIzM2CB8xMC+AFgZr4sezU=" | openssl enc -d -des-ede3 -K "5365637265744B6579000000000000000000000000000000" -nosalt -a
view raw TripleDES.sh hosted with ❤ by GitHub
import java.util.Arrays;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
// import javax.xml.bind.DatatypeConverter;
public class TripleDESTest {
private String encrypt(String clearText, String secretKey) {
try {
byte[] bytePass = secretKey.getBytes("utf-8");
byte[] byteKey = Arrays.copyOf(bytePass, 24);
// System.out.println(DatatypeConverter.printHexBinary(byteKey));
SecretKey key = new SecretKeySpec(byteKey, "DESede");
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] byteText = clearText.getBytes("utf-8");
byte[] buf = cipher.doFinal(byteText);
byte[] byteBase64 = Base64.getEncoder().encode(buf);
String data = new String(byteBase64);
return data;
}
catch(Exception ex) {
return ex.getMessage();
}
}
private String decrypt(String data, String secretKey) {
try {
byte[] byteData = Base64.getDecoder().decode(data.getBytes("utf-8"));
byte[] bytePass = secretKey.getBytes("utf-8");
byte[] byteKey = Arrays.copyOf(bytePass, 24);
SecretKey key = new SecretKeySpec(byteKey, "DESede");
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] byteText = cipher.doFinal(byteData);
String clearText = new String(byteText, "utf-8");
return clearText;
}
catch(Exception ex) {
return ex.getMessage();
}
}
public static void main(String[] args) {
String clearText = "BSプレミアム20日放送";
String secretKey = "SecretKey";
String data = new TripleDESTest().encrypt(clearText, secretKey);
clearText = new TripleDESTest().decrypt(data, secretKey);
System.out.println("Encrypted String: " + data);
System.out.println(clearText);
}
}
<?php
function encrypt_3des($clear_text, $key) {
$encrypt_text = openssl_encrypt($clear_text, "DES-EDE3", $key, OPENSSL_RAW_DATA, "");
$data = base64_encode($encrypt_text);
return $data;
}
function decrypt_3des($data, $key) {
$encrypt_text = base64_decode($data);
$clear_text = openssl_decrypt($encrypt_text, "DES-EDE3", $key, OPENSSL_RAW_DATA, "");
return $clear_text;
}
$clear_text = "BSプレミアム20日放送";
$key = "SecretKey";
$data = encrypt_3des($clear_text, $key);
echo "Encrypted String: ".encrypt_3des($clear_text, $key)."\n";
echo decrypt_3des($data, $key)."\n";
?>

Output:

Encrypted String: tpGP6UtYB5MLZwFG89V+TEIzM2CB8xMC+AFgZr4sezU=
BSプレミアム20日放送

AES-128-CBC

using System;
using System.Text;
using System.Security.Cryptography;
namespace AES128
{
class Program
{
private string encrypt(string clearText, string secretKey, string initVector)
{
try
{
AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider();
aesProvider.KeySize = 128;
aesProvider.BlockSize = 128;
aesProvider.Mode = CipherMode.CBC;
aesProvider.Padding = PaddingMode.PKCS7;
byte[] byteText = Encoding.UTF8.GetBytes(clearText);
byte[] byteKey = Encoding.UTF8.GetBytes(secretKey.PadRight(16, '\0'));
if(byteKey.Length > 16)
{
byte[] bytePass = new byte[16];
Buffer.BlockCopy(byteKey, 0, bytePass, 0, 16);
byteKey = bytePass;
}
byte[] byteIV = Encoding.UTF8.GetBytes(initVector.PadRight(16, '\0'));
if(byteIV.Length > 16)
{
byte[] byteInit = new byte[16];
Buffer.BlockCopy(byteIV, 0, byteInit, 0, 16);
byteIV = byteInit;
}
aesProvider.Key = byteKey;
aesProvider.IV = byteIV;
byte[] byteData = aesProvider.CreateEncryptor().TransformFinalBlock(byteText, 0, byteText.Length);
return Convert.ToBase64String(byteData);
}
catch(Exception ex)
{
return ex.Message;
}
}
private string decrypt(string data, string secretKey, string initVector)
{
try
{
AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider();
aesProvider.KeySize = 128;
aesProvider.BlockSize = 128;
aesProvider.Mode = CipherMode.CBC;
aesProvider.Padding = PaddingMode.PKCS7;
byte[] byteData = Convert.FromBase64String(data);
byte[] byteKey = Encoding.UTF8.GetBytes(secretKey.PadRight(16, '\0'));
if(byteKey.Length > 16)
{
byte[] bytePass = new byte[16];
Buffer.BlockCopy(byteKey, 0, bytePass, 0, 16);
byteKey = bytePass;
}
byte[] byteIV = Encoding.UTF8.GetBytes(initVector.PadRight(16, '\0'));
if(byteIV.Length > 16)
{
byte[] byteInit = new byte[16];
Buffer.BlockCopy(byteIV, 0, byteInit, 0, 16);
byteIV = byteInit;
}
aesProvider.Key = byteKey;
aesProvider.IV = byteIV;
byte[] byteText = aesProvider.CreateDecryptor().TransformFinalBlock(byteData, 0, byteData.Length);
return Encoding.UTF8.GetString(byteText);
}
catch(Exception ex)
{
return ex.Message;
}
}
static void Main(string[] args)
{
string clearText = "BSプレミアム20日放送";
string secretKey = "SecretKey";
string initVector = "InitVector";
string data = new AES128.Program().encrypt(clearText, secretKey, initVector);
clearText = new AES128.Program().decrypt(data, secretKey, initVector);
Console.WriteLine("Encrypted String: " + data);
Console.WriteLine(clearText);
Console.ReadLine();
}
}
}
view raw AES128.cs hosted with ❤ by GitHub
#!/usr/bin/env python3
# coding: utf-8
import base64
from Crypto.Cipher import AES
def encrypt_aes_128(clear_text, key, iv):
key_byte = key.encode('utf-8')
key_byte = key_byte.ljust(16, "\0".encode('utf-8'))
if len(key_byte) > 16:
key_byte = key_byte[:16]
iv_byte = iv.encode('utf-8')
iv_byte = iv_byte.ljust(16, "\0".encode('utf-8'))
if len(iv_byte) > 16:
key_byte = key_byte[:16]
# PKCS#5
pad_len = 16 - len(clear_text) % 16
padding = chr(pad_len) * pad_len
clear_text += padding
cryptor = AES.new(key_byte, AES.MODE_CBC, iv_byte)
data = cryptor.encrypt(clear_text)
return base64.b64encode(data).decode('utf-8')
def decrypt_aes_128(data, key, iv):
data_byte = base64.b64decode(data.encode('utf-8'))
key_byte = key.encode('utf-8')
key_byte = key_byte.ljust(16, "\0".encode('utf-8'))
if len(key_byte) > 16:
key_byte = key_byte[:16]
iv_byte = iv.encode('utf-8')
iv_byte = iv_byte.ljust(16, "\0".encode('utf-8'))
if len(iv_byte) > 16:
key_byte = key_byte[:16]
cryptor = AES.new(key_byte, AES.MODE_CBC, iv_byte)
c_text = cryptor.decrypt(data_byte)
# PKCS#5
pad_len = ord(c_text.decode('utf-8')[-1])
clear_text = c_text.decode('utf-8')[:-pad_len]
return clear_text
def main():
clear_text = "BSプレミアム20日放送"
key = "SecretKey"
iv = "InitVector"
data = encrypt_aes_128(clear_text, key, iv)
print("Encrypted String: " + data)
print(decrypt_aes_128(data, key, iv))
if __name__ == "__main__":
main()
view raw AES128.py hosted with ❤ by GitHub
echo -n "BSプレミアム20日放送" | openssl enc -e -aes-128-cbc -K "5365637265744B657900000000000000" -iv "496E6974566563746F72000000000000" -nosalt -a
echo "zM+I3ulxLl4Pna0FgwGKZcQHXCBcO1hzTtKmf2n36vk=" | openssl enc -d -aes-128-cbc -K "5365637265744B657900000000000000" -iv "496E6974566563746F72000000000000" -nosalt -a
view raw AES128.sh hosted with ❤ by GitHub
import java.util.Arrays;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
// import javax.xml.bind.DatatypeConverter;
public class AES128Test {
private String encrypt(String clearText, String secretKey, String initVector) {
try {
byte[] bytePass = secretKey.getBytes("utf-8");
byte[] byteV = initVector.getBytes("utf-8");
byte[] byteKey = Arrays.copyOf(bytePass, 16);
byte[] byteIV = Arrays.copyOf(byteV, 16);
// System.out.println(DatatypeConverter.printHexBinary(byteKey));
// System.out.println(DatatypeConverter.printHexBinary(byteIV));
SecretKeySpec skeySpec = new SecretKeySpec(byteKey, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(byteIV);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);
byte[] byteText = clearText.getBytes("utf-8");
byte[] buf = cipher.doFinal(byteText);
byte[] byteBase64 = Base64.getEncoder().encode(buf);
String data = new String(byteBase64);
return data;
}
catch(Exception ex) {
return ex.getMessage();
}
}
private String decrypt(String data, String secretKey, String initVector) {
try {
byte[] byteData = Base64.getDecoder().decode(data.getBytes("utf-8"));
byte[] bytePass = secretKey.getBytes("utf-8");
byte[] byteV = initVector.getBytes("utf-8");
byte[] byteKey = Arrays.copyOf(bytePass, 16);
byte[] byteIV = Arrays.copyOf(byteV, 16);
SecretKeySpec skeySpec = new SecretKeySpec(byteKey, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(byteIV);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivSpec);
byte[] byteText = cipher.doFinal(byteData);
String clearText = new String(byteText);
return clearText;
}
catch(Exception ex) {
return ex.getMessage();
}
}
public static void main(String[] args) {
String clearText = "BSプレミアム20日放送";
String secretKey = "SecretKey";
String initVector = "InitVector";
String data = new AES128Test().encrypt(clearText, secretKey, initVector);
clearText = new AES128Test().decrypt(data, secretKey, initVector);
System.out.println("Encrypted String: " + data);
System.out.println(clearText);
}
}
view raw AES128Test.java hosted with ❤ by GitHub
<?php
function encrypt_aes128($clear_text, $key, $iv) {
$iv = str_pad($iv, 16, "\0");
$encrypt_text = openssl_encrypt($clear_text, "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv);
$data = base64_encode($encrypt_text);
return $data;
}
function decrypt_aes128($data, $key, $iv) {
$iv = str_pad($iv, 16, "\0");
$encrypt_text = base64_decode($data);
$clear_text = openssl_decrypt($encrypt_text, "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv);
return $clear_text;
}
$clear_text = "BSプレミアム20日放送";
$key = "SecretKey";
$iv = "InitVector";
$data = encrypt_aes128($clear_text, $key, $iv);
echo "Encrypted String: ".$data."\n";
echo decrypt_aes128($data, $key, $iv)."\n";
?>
view raw AES128Test.php hosted with ❤ by GitHub

Output:

Encrypted String: zM+I3ulxLl4Pna0FgwGKZcQHXCBcO1hzTtKmf2n36vk=
BSプレミアム20日放送

AES-256-CBC

using System;
using System.Text;
using System.Security.Cryptography;
namespace AES256
{
class Program
{
private string encrypt(string clearText, string secretKey, string initVector)
{
try
{
AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider();
aesProvider.KeySize = 256;
aesProvider.BlockSize = 128;
aesProvider.Mode = CipherMode.CBC;
aesProvider.Padding = PaddingMode.PKCS7;
byte[] byteText = Encoding.UTF8.GetBytes(clearText);
byte[] byteKey = Encoding.UTF8.GetBytes(secretKey.PadRight(32, '\0'));
if (byteKey.Length > 32)
{
byte[] bytePass = new byte[32];
Buffer.BlockCopy(byteKey, 0, bytePass, 0, 32);
byteKey = bytePass;
}
byte[] byteIV = Encoding.UTF8.GetBytes(initVector.PadRight(16, '\0'));
if (byteIV.Length > 16)
{
byte[] byteInit = new byte[16];
Buffer.BlockCopy(byteIV, 0, byteInit, 0, 16);
byteIV = byteInit;
}
aesProvider.Key = byteKey;
aesProvider.IV = byteIV;
byte[] byteData = aesProvider.CreateEncryptor().TransformFinalBlock(byteText, 0, byteText.Length);
return Convert.ToBase64String(byteData);
}
catch (Exception ex)
{
return ex.Message;
}
}
private string decrypt(string data, string secretKey, string initVector)
{
try
{
AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider();
aesProvider.KeySize = 256;
aesProvider.BlockSize = 128;
aesProvider.Mode = CipherMode.CBC;
aesProvider.Padding = PaddingMode.PKCS7;
byte[] byteData = Convert.FromBase64String(data);
byte[] byteKey = Encoding.UTF8.GetBytes(secretKey.PadRight(32, '\0'));
if (byteKey.Length > 32)
{
byte[] bytePass = new byte[32];
Buffer.BlockCopy(byteKey, 0, bytePass, 0, 32);
byteKey = bytePass;
}
byte[] byteIV = Encoding.UTF8.GetBytes(initVector.PadRight(16, '\0'));
if (byteIV.Length > 16)
{
byte[] byteInit = new byte[16];
Buffer.BlockCopy(byteIV, 0, byteInit, 0, 16);
byteIV = byteInit;
}
aesProvider.Key = byteKey;
aesProvider.IV = byteIV;
byte[] byteText = aesProvider.CreateDecryptor().TransformFinalBlock(byteData, 0, byteData.Length);
return Encoding.UTF8.GetString(byteText);
}
catch (Exception ex)
{
return ex.Message;
}
}
static void Main(string[] args)
{
string clearText = "BSプレミアム20日放送";
string secretKey = "SecretKey";
string initVector = "InitVector";
string data = new AES256.Program().encrypt(clearText, secretKey, initVector);
clearText = new AES256.Program().decrypt(data, secretKey, initVector);
Console.WriteLine("Encrypted String: " + data);
Console.WriteLine(clearText);
Console.ReadLine();
}
}
}
view raw AES256.cs hosted with ❤ by GitHub
#!/usr/bin/env python3
# coding: utf-8
import base64
from Crypto.Cipher import AES
def encrypt_aes_256(clear_text, key, iv):
key_byte = key.encode('utf-8')
key_byte = key_byte.ljust(32, "\0".encode('utf-8'))
if len(key_byte) > 32:
key_byte = key_byte[:32]
iv_byte = iv.encode('utf-8')
iv_byte = iv_byte.ljust(16, "\0".encode('utf-8'))
if len(iv_byte) > 16:
key_byte = key_byte[:16]
# PKCS#5
pad_len = 16 - len(clear_text) % 16
padding = chr(pad_len) * pad_len
clear_text += padding
cryptor = AES.new(key_byte, AES.MODE_CBC, iv_byte)
data = cryptor.encrypt(clear_text)
return base64.b64encode(data).decode('utf-8')
def decrypt_aes_256(data, key, iv):
data_byte = base64.b64decode(data.encode('utf-8'))
key_byte = key.encode('utf-8')
key_byte = key_byte.ljust(32, "\0".encode('utf-8'))
if len(key_byte) > 32:
key_byte = key_byte[:32]
iv_byte = iv.encode('utf-8')
iv_byte = iv_byte.ljust(16, "\0".encode('utf-8'))
if len(iv_byte) > 16:
key_byte = key_byte[:16]
cryptor = AES.new(key_byte, AES.MODE_CBC, iv_byte)
c_text = cryptor.decrypt(data_byte)
# PKCS#5
pad_len = ord(c_text.decode('utf-8')[-1])
clear_text = c_text.decode('utf-8')[:-pad_len]
return clear_text
def main():
clear_text = "BSプレミアム20日放送"
key = "SecretKey"
iv = "InitVector"
data = encrypt_aes_256(clear_text, key, iv)
print("Encrypted String: " + data)
print(decrypt_aes_256(data, key, iv))
if __name__ == "__main__":
main()
view raw AES256.py hosted with ❤ by GitHub
echo -n "BSプレミアム20日放送" | openssl enc -e -aes-256-cbc -K "5365637265744B65790000000000000000000000000000000000000000000000" -iv "496E6974566563746F72000000000000" -nosalt -a
echo "uatdkMyXtxSIgbvVthf3mYfYbyAOkZDYy+/eGbw7ukA=" | openssl enc -d -aes-256-cbc -K "5365637265744B65790000000000000000000000000000000000000000000000" -iv "496E6974566563746F72000000000000" -nosalt -a
view raw AES256.sh hosted with ❤ by GitHub
/*
* You need to install
* Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files
* for using 256-bit key
*/
import java.util.Arrays;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
// import javax.xml.bind.DatatypeConverter;
public class AES256Test {
private String encrypt(String clearText, String secretKey, String initVector) {
try {
byte[] bytePass = secretKey.getBytes("utf-8");
byte[] byteV = initVector.getBytes("utf-8");
byte[] byteKey = Arrays.copyOf(bytePass, 32);
byte[] byteIV = Arrays.copyOf(byteV, 16);
// System.out.println(DatatypeConverter.printHexBinary(byteKey));
// System.out.println(DatatypeConverter.printHexBinary(byteIV));
SecretKeySpec skeySpec = new SecretKeySpec(byteKey, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(byteIV);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);
byte[] byteText = clearText.getBytes("utf-8");
byte[] buf = cipher.doFinal(byteText);
byte[] byteBase64 = Base64.getEncoder().encode(buf);
String data = new String(byteBase64);
return data;
}
catch(Exception ex) {
return ex.getMessage();
}
}
private String decrypt(String data, String secretKey, String initVector) {
try {
byte[] byteData = Base64.getDecoder().decode(data.getBytes("utf-8"));
byte[] bytePass = secretKey.getBytes("utf-8");
byte[] byteV = initVector.getBytes("utf-8");
byte[] byteKey = Arrays.copyOf(bytePass, 32);
byte[] byteIV = Arrays.copyOf(byteV, 16);
SecretKeySpec skeySpec = new SecretKeySpec(byteKey, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(byteIV);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivSpec);
byte[] byteText = cipher.doFinal(byteData);
String clearText = new String(byteText);
return clearText;
}
catch(Exception ex) {
return ex.getMessage();
}
}
public static void main(String[] args) {
String clearText = "BSプレミアム20日放送";
String secretKey = "SecretKey";
String initVector = "InitVector";
String data = new AES256Test().encrypt(clearText, secretKey, initVector);
clearText = new AES256Test().decrypt(data, secretKey, initVector);
System.out.println("Encrypted String: " + data);
System.out.println(clearText);
}
}
view raw AES256Test.java hosted with ❤ by GitHub
<?php
function encrypt_aes256($clear_text, $key, $iv) {
$iv = str_pad($iv, 16, "\0");
$encrypt_text = openssl_encrypt($clear_text, "AES-256-CBC", $key, OPENSSL_RAW_DATA, $iv);
$data = base64_encode($encrypt_text);
return $data;
}
function decrypt_aes256($data, $key, $iv) {
$iv = str_pad($iv, 16, "\0");
$encrypt_text = base64_decode($data);
$clear_text = openssl_decrypt($encrypt_text, "AES-256-CBC", $key, OPENSSL_RAW_DATA, $iv);
return $clear_text;
}
$clear_text = "BSプレミアム20日放送";
$key = "SecretKey";
$iv = "InitVector";
$data = encrypt_aes256($clear_text, $key, $iv);
echo "Encrypted String: ".$data."\n";
echo decrypt_aes256($data, $key, $iv)."\n";
?>
view raw AES256Test.php hosted with ❤ by GitHub

Output:

Encrypted String: uatdkMyXtxSIgbvVthf3mYfYbyAOkZDYy+/eGbw7ukA=
BSプレミアム20日放送

Generate same HMAC hash with Python and PHP

Python(3) codes:


#!/usr/bin/env python3
# coding: utf-8

import hashlib
import hmac
import base64

message = "BSプレミアム20日放送";
key = "cwDrzFu4OnEH8mZpoGKP9B2eEVQ2BCZuWk1hS8Y+";

hmac_hash = base64.b64encode(hmac.new(bytearray(key, 'utf-8'), message.encode('utf-8'), hashlib.sha1).digest())

print(hmac_hash)

PHP codes:


<?php
$message = "BSプレミアム20日放送";
$key = "cwDrzFu4OnEH8mZpoGKP9B2eEVQ2BCZuWk1hS8Y+";

$hmac = base64_encode(hash_hmac("sha1", $message, $key, true));

echo $hmac;
?>

 

The result should be:

5Fe7Tptx3xywnN1aC3qE+llbmqo=

[转] 胡紫薇:忆旧

忆旧

胡紫微

(2013-01-15 16:59:55)

想想也有五年多了。

2007年8月7号。一直很清楚的记得这日子。因为这是北京奥运会倒计时一周年的前一天。正在带妆彩排。在台里300平米演播室。和那时《身边》的一堆同事。为了第二天下午四个小时的倒计时特别节目的直播,大伙儿都在。当时,一点也没想到,这会是我和朝夕相处多年的团队,最后一次以这种方式相聚在一起。

米兰昆德拉在《告别的聚会》里说过大概这个意思的话:最好的告别,就是你俩话正说到一半,突然有个事把你叫走了。话头还撂在那儿,原打算待会儿继续的,却就此天人永隔。当时读到时只觉得诗意,现在明白,是天意。天意呢,就是那个总会在你意想不到的时刻,以一种你意想不到的方式,迅疾而至的东西。

下午两点多,台办来叫人。到了电梯间,正碰上当时的奥运节目部主任杜研,我的直管领导。也是被时任总编辑Z先生叫去问话的。当时看着杜主任,满是心里咯噔一下的表情。想来他看到我时也差不多是那咯噔一下的样子吧。

其实,不好的预感这几天一直都在。而事情的缘起怕是要从更早些时候说起。

整整一个月前的7月8号,生活频道的《透明度》栏目报道了据称是市民举报的早摊点出现废纸和进肉馅的劣质包子,也就是后来广为人知的“纸包子”。现在想来,那档节目做的堪称详尽,从市民的举报,到栏目组安排记者到事发地进行暗访,随后联系属地的工商所做了突击检查,该摊贩因为没有营业执照和卫生许可证被取缔。直到节目最后,区卫生防疫部门的执法人员提醒观众识别纸质包子馅的方法。

隔日,《北京新闻》以纸箱馅包子流入早餐点为题报道了此事。随后多家中央和地方电视台、报纸转载了此报道。台里的十多档新闻类民生类节目也进行了转播和转评。同时,一些外媒如ABC、CNN、BBC跟进关注了此事。7月16日,有报道称,纸馅儿包子摊主仍然在逃,食品安全办公室抽检了全市23家早餐摊点未发现纸馅儿包子。有餐饮业者表示,相关报道对生意有影响。7月18日晚间,《北京新闻》称纸馅儿包子被认定为虚假报道。摄制者已被警方刑事拘留。北京电视台向社会深刻道歉。

事情到了这一步,对于公众来说,结束了。事情到了这一步,跟我个人也还扯不上关系。除了当时我担任制片人的《身边》栏目也在转评转播的热潮中转评了一下。按如今的网络语言,顶多也就一打酱油的介入程度吧。连单独挨个批评的格也都够不上。大家全部的注意力,除了每天都有的涉及生活频道的人事变动、事后追究和栏目调整的各种大道、小道消息外,唯一需要严防死守的,就是但求无过四个字。

说起来呢,也是很有喜感。就在纸包子报道前后这风云突变这半个月,我个人其实并不在岗位上。甚至不在北京。那时市里头有一个“四个一批”的培养计划。四个一批,听说过么?是全国文宣系统的一项人才工程,据说是要着力选拔培养一批名记者、名主持人、名出版家、名艺术家。作为工程,总需有各种有待擢拔的苗子,于是台里不知怎么轮到我作为苗子之一,参加了第一期的培训。第一期,一般都是很受重视的。这一次也不例外。培训共脱产三周。前半程北京学习,后半程港澳观摩。当时作为一档周播节目和一档日播节目的制片人,另外每周还要主持8期节目,每天可想而知的各种忙乱各种台前幕后的辗转。当时调侃自己,一睁眼就是事,一闭眼就是梦。没有休息日,没有节假日,满脑子只剩下节目的吞吐量。而这样日以继夜的生活,已经如此这般地过了四年。放下90多人的团队和每周250分钟节目的制播,一走20天,对于我,也是第一次。确实不能不说有点借此机会偷口气的心思。

所以说,纸包子东窗事发和几乎整个发酵过程,还是后来在网上得知周全的。当时在香江之畔,只隐约听说了了个大概。 而当我八月初回京时,《身边》栏目风云突变,是因为与纸包子全然无关的另外一篇报道。

我6号回京一下飞机,就被直接叫回了台里。说身边的一期节目出事了。在全台的编前会上刚挨了点名批评,要求栏目组马上整改并出具此事的处理意见。为此部门主任几乎一整天在身边转悠。看起来忧心忡忡。记得进到办公室已经晚上八九点,一屋子人,见我回来,鸦雀无声,栏目组里肃穆的一塌糊涂。放下行李就冲进机房,看到底是哪个节目惹了什么事。一看内容就把我看乐了。原来是在我出差这期间,接了一大妈打来的热线,购买了一台著名的H家电,结果制冷系统出了问题,找厂家无果大妈投诉到节目组。栏目组找到厂家的售后部门,给大妈修好了。完了。

我问这节目怎么了?台里说是批评报道。现在台里的规定是所有的批评性报道都停,所以身边这叫顶风作案。但是栏目组觉得这不是批评报道,有问题,有解决,顶多算中性报道。如果是批评报道,部门领导审片时也会把关。部里也给台里写了此节目并非批评报道而是中性报道的情况说明。

说完大家又都沉默下来等着我拿主意。记得我首先严肃批评了搭档多年的老郭,是不打勤不打懒就打咱这不长眼,这日子口没见头头脑脑头上都高悬着别再出事四个大字风雨飘摇呢么。唱赞歌,就说好听的不会啊,赶这节骨眼做这种选题,亏你受党教育多年。第二,千万别再执拗是不是批评报道这事了,台里既然已经定性,只怕这一刀躲不过。马上给台里写编辑停职主编制片人罚薪的栏目组处理意见,明天上交,看能不能饶得过。第三,制片人也就是胡老师本人,做深刻检查。大家听我的口气还在调侃老郭,也都松了口气,老郭也表示谁再做问题报道谁孙子。因为第二天还要直播彩排,大家一阵哄笑散了。我一个人留在组里,连夜写检查。记得那个晚上,办公室突然就安静下来那一刻,一下子显得好大,好亮,万籁俱寂。我的笔在稿纸上腾挪着,沙沙的响,活象砧板上一尾跳跃的鱼,看似很轻快有力的,挣扎。

后来想,这检查应该好好留着。这几乎是我为这家供职16年的传媒机构贡献的最后一篇稿件了。而其中各种心甘情愿的言不由衷,也是中国媒体人的具足体验。

其实,检查和情况说明甚至部门内部的处理处罚都已经不必了。第二天,台里紧急召开了编务会。专门研究如何处置身边,和责任人。

于是就有了倒计时一周年的前一天,下午两点多总编的召唤。七楼总编辑办公室。七楼还是八楼来着,忘了。十几年期间只去过有数的几次。我和杜主任,敲门。进门。站在门口。之后发生的一切,定格在我一向迷糊而健忘的内心里,再未曾忘,随着岁月,反倒日渐清晰。

总编辑Z先生站在大班台里。面色凝重。他请我们坐。声音有些生硬。我们面面相觑。

Z先生说,鉴于局阅评员注意到近期身边栏目的一期节目中,关于H冰箱的一则批评报道,不负责任地抹黑民族品牌,并引发了该品牌在欧洲国家销售的不畅和退货情况,对我国民族企业走出去产生了不良影响,是错误的媒体导向。特出具阅评意见,报北京电视台领导望与重视严肃处理云云。

记得小时候看鲁迅文章,知道了有个词叫骇笑。但一直不能体会这会是一种什么心情下的表情。直到那天,听了总编转述的阅评员意见,我想,我当时大约是骇笑了。

当然,还没完。

我开始感觉到自己心脏在跳。

Z先生接着说,鉴于,阅评员的意见和身边栏目中屡次批评报道导向错误的情况,经编委会讨论通过特作如下决定,撤销胡紫微的制片人职务,停职检查。作为栏目主持人继续工作。

记得当时杜研主任一下子站了起来,好像是跳了起来,跟总编辑很着急的讲着什么。讲了好多话,我听不清,只觉得远远的,高一声低一声。听着杜主任为我争辩平时工作如何勤力,如何常年无休尽职守责,收视如何好,为台里创收如何有功劳。。。很奇怪的是,当时心情其实有一种很奇特的平静。而且轻松,眼前一片澄明。甚至觉得杜主任急的那样也是关心则乱。这些事,领导能不知道么。但是,当然了,心灵的澄澈,并不能阻止住自己的四肢象树叶般的抖。为了平复自己颤抖的四肢,长长的呼气。心里不停在说,大爷的,不许哭。

后来,两个站着的领导渐渐都不再说话了。就那么看着坐着的我。是不是该我发言了呢。还是因为我的脸色太过难看。我也不知道接下来该怎么办。因为没有经验,也因为担心自己一张嘴就会语不成句。

好像过去了半辈子那么久。两位领导还是看着我。看来,作为被宣布的人,我必须要有所表示,一切才好结束。

我站起来。我说了三点。我竟然还记得说首先,其次,第三。后来我明白了,当一个人无比混乱的时候,往往会说我简单说三点。

我说,首先,感谢台里这么多年对我的培养和任用。第二,H事件,我负全部责任,领导责任和直接责任。听凭台里的处分。只是希望到我为止,不要再追究其他同事和栏目。这是大家的饭碗。也算是我仅有的一点个人请求。第三,我希望就此错误做彻底的反省。主持人工作请台里另外安排其他同事承担。

听了我的一二三,Z总编跟了一句:台里的意思,主持人你还是可以照常的。我说:我累了。Z想了一会儿,说:那,尊重你的意见吧。

我和杜研走出总编办公室,电梯到一楼。一路无话。一起回栏目组。在紧挨后门的过厅里,挂着一溜台里主持人的照片。我的照片在紧左边。就在那里,忽然迎面碰上了梁言老师。梁言是电台体育名嘴,也是身边的常设嘉宾,多年蒙他帮忙,半师半友,很是熟悉,熟到他那著名的绰号梁叔,就是我起的。一看到梁叔,不知怎么的,好像突然一下子回过神明白过来,我将永远的离开我参与创办朝夕相守五年的《身边》栏目。我生命中的一个段落,结束了。

很突然的,心里难受极了,悲从中来,就那么站在他对面,放声痛哭。我想梁叔是吓坏了,不知道发生了什么,站在那里,一直拍着我的肩膀。现在想起来,在BTV 老台主楼的门口,曾经十六年无数次走过的地方,在一个盛夏的下午,伴着阵阵寂寞的蝉鸣,两个并不相干的男人,陪着一个痛哭的女子,度过了她生命中某个告别的时刻。

站那儿哭了很长时间,但是,很值得。因为从那以后,再没为此事掉过一滴眼泪。PS,那天应该鼻涕眼泪油彩脂粉的胡乱蹭了梁言老师西装一身吧,也不知回去怎么跟嫂子瞎编理由的。呵呵。今天一并做个说明。致谢并致歉。

分手时,梁叔从杜主任那儿约略知道了事情的大概。也是默然。问我有什么需要他做的。我说也没什么,就是请他先不要告诉张老师这变故,明天他还有直播。

那天傍晚,我离开了身边,嘱咐老郭三件事。第一,赶紧把停职的同事叫回来上班把原打算提交给部门的一系列处罚意见销毁。这事不要再提。二,配合新的制片人工作,交接时保证播出安全。三,让同事方便时帮我把个人东西送回我家。从此,我个人也没再跨进过《身边》办公室。

后来听说,老郭在那天傍晚台里领导召开的新制片人任命会上,哭了。他在会上发誓说那期节目与我完全无关,我出差在外并没有参与选题录制编辑和审查任何环节,都是他自己的责任,希望领导体察实情。撤销对我的处分。但是覆水难收。3天后,老郭辞职,并不顾主管领导苦劝慰留。比我还彻底的离开了我们共同创办的身边和北京电视台。听到这个消息,我们见了一面。彼此都说了些负气的话。我说你这是为全自己内心的安宁,把我至于不仁不义的境地;把身边一帮子兄弟撒手不管,是个混蛋。老郭说我平时好像个侠女,关键时刻什么也豁不出去也就认识瓶瓶罐罐的一大俗人,孬种。之后不欢而散,几乎一年没有再联系。但是在这一年中的每一天,我都不曾忘记,这个“混蛋”,会是我一生的挚友。

另外值得一提的事,停了我的职之后,身边的其他同事和栏目本身没有受到更多追究,接手的制片人也叫张斌,来后第一次讲话跟大家说,我是来临时替胡老师看摊儿的。我们一起等她回来。张老师是厚道人,对大家也很仁厚。身边栏目得以在较长时间维持着原来的影响力和不错的口碑,要感谢他的延续。在他升任频道副总监后,身边栏目诸多辗转,已不复当年。人员几乎流散殆尽,倒是只有那位令我命运逆转的同事,作为硕果仅存的身边元老,至今还在身边坚守。北京卫视的早间偶尔还可以看到她做出镜记者的身影。人生如戏。

后来, 主管我们部门的老领导——也是北京台为数不多的从内心里引为恩师的人——朱江副总编,曾经约着见过一面。大概在07年12月上旬的一个周日。先问我的近况,告诉我台里面之后对于我并没有任何处分的决定。又说部里很忙,建议我回来上班。朱总从来没有跟我提起的是,在我离职后,为了我的处理决定他为了很多难,跟Z总编几近翻脸。我又怎么能让领导间因我的回归再生嫌隙呢。更何况,这几个月里,对于我所处的媒体生存环境和自己未来的路,想了很多,对于何为得失的判断,也变了很多。我说想借此机会调养一下身体,想要个孩子。请他体谅。朱总说体谅体谅。我说辜负辜负。那天他说,电视主持人很多,但是向我这样的广谱型的主持人不多。再经炼历,也许会在主持这条路上走得很远。以前从来没听说过什么叫广谱型主持人,感到很新鲜,也觉得有点像我似的,所以一直记着。

分手后,我一个人走在阜成门大街上,记得那天太阳特别好,虽然已经到了冬天,走着走着,还是觉得周身热乎乎的。心里很静,想着以后的日子,巴望着岁月静好,觉得可能我一生中最重要的坎儿就这么迈过去了。谁能想到,真正的命运,我尚缘铿一面。谁能想到,这个无常的存在,此时恰巧就在前面不远处的拐角,正在向着我,旖旎而来。

后记

1,说说阅评员。我想我不是第一个因为阅评员的阅评意见而离开工作岗位的媒体人,也不会是最后一个。阅评员是我们这里独具特色的媒体管理角色。它没有任何显在的权力,又有着大无其外的作用。大到也许一篇文章,就可以葬送一个人的职业生涯。它主要由退休的媒体人士构成,唯一的任务就是看电视,看报纸,看影视剧,观察一切媒体产品,并且把不符合导向要求的篇章,以阅评意见的方式呈送宣传主管部门。这是一个很特别的群体,虽然对于它所监控的媒体经常可以一言兴废,但是从无义务对自己的表达负责。当一个人,一个组织并不需要对自己的所作所为负责时,总是会走向邪恶。概莫能外。个人认为,加诸于媒体的阅评员制度,是我们这个社会最不堪的那个部分里,最幽深的一个角落。这里有体制的原因,也有体制所扭曲的人性的折射。阅评员都是由所谓退下来的资深媒体人构成的,他们一辈子被管束压抑扭曲,但是在风烛残年,他们仍然甘之如饴地领受着毁了他们一生的那个势力的召唤,主动地把自己的余生跟这个原本应该深恶痛绝的丑恶捆绑在一起,跪求豢养。因为是内行人,所以发现所谓导向差池时往往眼光更精准,因为是内行人,所以在出具所谓阅评意见时更能言中关隘。并且在需要射杀自己的同类时,并不会把枪口抬高一厘米。

2,说说拍板的人。对于时任总编辑的Z先生,当时不能不说是感到很诧异的,竟然可以拿一些根本站不住脚的荒唐理由就这样毫不犹豫地剥夺别人的职业尊严,而这一切不过是因为恐惧。并不见一丝担当。现在想来是未免过于自怨自艾了。在一个狼奔豕突的社会里,大家不过都是自求生路的可怜虫吧。谁会担待谁呢。鸟为食亡。据说后来这位总编辑也因为旁的什么黯然离开了这个岗位。有过去的同事赶紧第一时间告诉我替我开心。可是,又有什么可开心呢。只不过又一次印证了,在这样一个外无操守内无温暖的环境里,大家都会付出代价。或早或晚。

3,说说事情本身。至于因为报道产品质量问题而下岗这事,也有同事和上司为我鸣不平,现在评估起来履行的是完全正当的媒体监督责任,是冤假错案,应该给个说法。也有同行赞我不失风骨,高风亮节。对于这事我本人是这么看的。常年从事中国特色的媒体报道的,都知道这句话:收视率是生命线,导向是生死线。媒体人在这两者之间挣扎,与钻进风箱的老鼠,在境遇上本也没什么不同。我当年确实是倒在生死线上,现在想来,却也没什么可悲壮、可炫耀的。回想当年,更没有什么以一己之身捍卫公众的知情权这样的职业上的自觉。一切不过是因为,我们是吃媒体这碗饭的,收视率是你存在的不二前提。都知道坏消息是好新闻的道理,于是在具体的选题操作上,总是不自觉的倒向揭示。倒向挖掘。倒向质疑。而不是倒向讴歌,倒向弘扬,倒向教化。至于不愿意吃相太难看,那倒是见仁见智了,你觉得这样说话已经属于寡廉鲜耻,而他觉得这才叫忍辱负重。各见本心罢了。至于要个“说法”呢,就像我在微博里说的,这个神奇的国度,你可以得到很多东西,唯独要不到——说法。

4,说说自己。听说情急之言,最能表明你是什么样的人。过了这几年,有时回想起自己遭遇职业变故时,对我当时的命运执掌者所说的那几句话。也试着分析过,自己骨子里到底是个什么人。首先,我,可能我这一代人都逃不脱的是,我们所受的冠冕堂皇的教育是深入骨髓的,也就是所谓喝狼奶长大。我从此自知我其实是自己所厌憎的那一堆人中的一个。那种标记就是,哪怕在一个最狼狈的时刻,也要求自己象外交部发言人那样虚与委蛇的开场白;再者,毋庸讳言,内心里我恐怕是有着某种追求悲情的情结,说白了就是总要当“大家撤退我掩护”的救世主的角色,并不管看上去是不是有点自不量力,是不是有点幼稚可笑。这样的悲情也许会伴我一生,若使君有意,总不辞相呴以湿就是了;至于最后表达的不再主持这事呢,令所有人很意外,但这就是我。当时情急之间脱口而出,但是对于这个决定,直到如今,从没有过一丝一毫的后悔。这里不能说没有一点负气,但是成分很小。就此称量自己,总还是有些不愿变通的东西在那里吧。也就是说,在人生某些艰难的时刻,我是那种也许没有办法不屈从,但你也无法令我不藐视的人。从骨子里讲,我无惧对峙。有时候觉得,也许只有这一点可以告慰自己时常弯曲的双膝,我的内心还是站立的。

5,最后,说说纸包子。当爆出纸馅儿包子是一出自导自演的所谓假新闻时,我的内心是很震动的。一个以揭露假冒伪劣的节目,却公然造假,本身就是一件很荒唐的事。制假贩假,与你所揭露的又有何异。不用说,制播假新闻,对于媒体操守是一种亵渎,对于业内揭示性新闻和监督类报道的打击更是假以时日亦不能稍作弥补的内伤。另一方面,相当吊诡的是,相关部门联合司法以雷霆之势处置此事之后,电视里报道的假一下子少了。而生活中的假却日渐猖獗。三聚氰胺,皮革奶,瘦肉精,塑化剂。。。几乎每隔一段时间,我们就得知有一种吃食内含有致命的毒素。而这些毒素对公众的戕害无不比纸包子令人扼腕百倍。从08年后,我们身边的食品安全局面日渐恶化。除了那个万恶的但已为他的造假付出足够代价的透明度的记者本人之外,我不知道,面对着这几乎无孔不入的毒,我们是否还需要去诅咒其他什么人。至于纸包子事件本身,我不知道内中是否还有隐情。但是如果有,希望在我们的有生之年,能够从容得知它的来龙去脉。真相不在当下,但是相信我们见得到。

见微知著 – 日本本州6日游游记

其实很少写游记,主要是因为小学时候写读后感、观后感留下的阴影,以为自己的感受只是为了应付差事,没有人会真正的看吧。

现在想起来,的确是老婆说的对,很多事情,随着时间的流逝,慢慢的被冲淡了,淡到自己都回忆不起来后,便永久的忘掉了。所以,不如在自己还有印象时把他们记下来,不一定为了别人,但至少为了自己吧。

这次游记,结合行程和照片吧,因为脱盲脱的不彻底,有的地点也没记住名字,实在是惭愧。

赶在这个时候去日本,其实时候很好,因为感觉日本的确需要依靠旅游来振兴一下本国的经济吧,以至于我和老婆的“大白本”护照竟也可以获得签证,实在是让我惊喜,据说07年的时候可是整团的拒签。

首先先说一些相关的话题吧,也算是铺垫吧。

报团:

一般的脱盲团行程很紧张,每个地方也不会让你多待的,毕竟是以脱盲为目的嘛,也就将就吧。如果团费低,必然会有自费和购物来贴补团费的,全程无自费的,团费就会高上去。这个其实很见仁见智,所以便宜有便宜的问题,一定要记住的。保证金什么的要是签证需要的,就要按规矩来,要是旅行社需要的,应该可以商量。不过有的旅行社需要交现金的,很不友好,记得问清楚吧。

日元:

其实并不像旅行社说的,人民币在日本无法兑换,只不过是兑换的地点少,而且要忍受高汇率(比如国内8.2,但是到了三菱UFJ银行就要10.3了),你也可以和导游或者领队换,行个方便呗,汇率商量着来,不过总不可能像国内银行那样优惠吧。在日本一律花日元,美元似乎也不大好使,更何况人民币呢。

语言:

千万千万不要认为你的英语可以在日本发挥作用,如果你真的这样认为,会傻眼的。除非你在机场或者很高档的酒店,否则认为日本人具备基本英语水平只能是你的一厢情愿。如果跟团还好说,如果自由行的话建议还是要有点日语功底,起码问路、问价格什么的要弄清楚。在酒店记得拿上酒店的名片什么的,万一回不来了还可以打车。不过日本的地铁指示牌写的也够清楚,地名基本都是汉字。

这次出行,说是6天,但是第一天的下午才出发,最后一天上午就往机场跑,实打实的也就4天吧。

第一天,首都机场上午暴雨,N多航班都被Cancel了,好在我们的航班幸免,赞一个。

湿漉漉的首都机场,因为上午航班滞留,导致我们的航班也晚点起飞了。

去的时候飞机上的海鲜饭,已经开始有日本的味道了~~~(不过很遗憾的是回来的时候就变成了牛肉饭和鸡肉面二选一了,以至于空姐还说反了,让我们困惑了好一阵……)

往日本飞其实是向着日出的方向飞,日本时间比国内时间快一个小时,想想刚到日本生命中就突然“少了”一个小时哦。

日本关西机场通道,从这里下去就要过海关和边防,对于初次出国的我还是小紧张了一把。(PS:日本的扶梯都很窄的,大型商店也不例外的。)

关西机场里面的摆设,很有日本特色。日本的机场卖的东西比一般的地方只是稍贵一点,不像国内那样能差出几倍到几十倍……

机场碰到的小孩,太萌了~~~

第一天住的旅店离关西机场不远,应该算作大阪的郊区。酒店虽然不大,但是房间很干净,也很温馨。

床上放的是和服式的睡衣,相当的日本特色。

在日本穿这种和服式的衣服无论男女千万记得都要左压右,万万不可像国内穿女士衬衣那种右压左,那种是丧服。据森田导说他带的人之前有穿错的,影响很大很不好的。

日本的防灾工作应该做得相当的好,每个旅店的房间里面都会配备应急手电,取下来就会亮。

日本旅店的房间都相当的小,进门就是床;卫生间也相当的小,体形大的人不一定能适应的(后面有图,看得更清楚)。

第一天深夜,我们还不顾疲劳兴奋的去逛旅店附近的便利店。感觉日本最大的便利店不是7-11,而是LAWSON,无论市区还是近郊,你都可以看到LAWSON的身影,里面几乎能买到各种日常用品,而且价格还很公道(但是对于挣人民币的我们来说,感觉东西都不便宜)。7-11的话一般市区里面才能见到。

这家店的店员是一个实习生(胸牌上得知的),说话做事非常谨慎,尤其是看到我们这么多外国人。不过,日本人是很讲信誉和相信他人的。我们买东西给的10000大钞,照国内的习惯肯定是又是对着灯光看、又是用手搓的,这里的店员只是看了一眼,便开始找钱了,莫大的区别啊。

同行的一位大叔想买寿司,并要求加热;店员很不解的说:如果加热就烫了;我们也很不解的说:我们就想要烫的。最终还是没有买。其实,在日本,刺身和寿司都是凉着吃的……

========华丽分割第一天========

我们的导游名叫森田隆介,是一位日籍的台湾人,从小在日本长大,然后学的国语。森田导长得很帅,人也风趣幽默,口头禅是:服务员含着眼泪,带着微笑云云。据说森田导带的一些团员在脱团前特地和他照相,所以从那以后他对和他照相的人都很警觉,于是便没有给他照,感兴趣的朋友可以Google,能搜索到的。

第一晚旅店外面是一大片田地,种着绿油油的庄家,让人很是放松和留恋。

整齐的引水渠,里面的水清澈而水流急促。附近水管子上挂着警惕“水泥棒”的告示,其实就是警惕偷水的小偷,“泥棒”是日语小偷的意思。

第二天第一站:大阪城公园。

大阪城天守阁,典型的日本建筑。

大阪世博会的时间胶囊,一共埋了两个。第一个已经在2000年的时候取出来了,另一个据说要等到5000年后取出来了。

大阪市立博物馆,给我的第一感觉有点像“七三一”部队的样子,也不知怎么就联想在一起了……

大阪城丰国神社里面的许愿。祝愿都是很美好~~~

丰国神社里面看到的小狗,样子好怪啊。

大阪城公园的栏杆装饰。

蝉蜕。日本绿化好,树多,蝉也多。在城市里面都能听到分贝很大的蝉鸣。所以日本能诞生出《第八日的蝉》应该不足为奇吧。

第二站:大阪心斋桥和道顿崛。

心斋桥是大阪著名的商业街,道顿崛是大阪著名的美食街。

在心斋桥,一定要看看大阪的女孩子,而且一定要和东京的女孩子做比较。自我感觉,大阪的女孩子很朴实,虽然也化妆,但是都是那种很有朝气的装扮,人的精神面貌也好。而东京的女孩子感觉很疲劳,也略显死板,化妆以美白为主,尽显白领的气质。总之我还是更喜欢大阪的女孩子哈~~~

道顿崛的章鱼烧一定要尝尝,味道正,并且料足。我们因为时间关系在心斋桥的一个面馆吃的,给我印象最深的是那位店员女孩,一直很热情的招呼客人,永远发自内心的面带微笑的和你打招呼,真的是感触颇深。

路上赶上的阵雨。日本是海洋性气候,所以云会很多,有时走在路上,不知不觉就会赶上阵雨,有时还非常大,所以雨具是必不可少的。

做头发的妇女。日本的人工是非常贵的,所以剪头和做头发非常的贵,有时会到奢侈的程度。

第三站:西阵织和服会馆。

这里每天会定时举办和服展示。还没到开始时间,就有无数游客把小小的展台围得里三层外三层的;还会有无数的大叔拼命的照相。其实展示员并不十分好看,重点是展示和服,但是吧……但是吧……

会馆内演示传统上彩工艺的工作人员。这是我此行最喜欢的一张照片~~~有谁知道这位工作人员信息的话,请一定告诉我哈~~~

会馆里出售的人偶,很特色。

第四站:金阁鹿苑寺。

名列世界遗产的金阁寺静静的立在湖面上,上面的那个神鸟就是日元后面的那个。金阁鹿苑寺不大,走着也就20分钟不到就可以走完。

第五站:平安神宫。

据森田导介绍,在日本,神宫是敬奉天皇的,而神社是敬奉日本神话中的神的,这就是神宫和神社的区别。

在如此寸土寸金的地方居然兴建如此大规模的建筑,可见天皇精神力量的强大。

第二天晚,在常滑过夜,也是去LAWSON买了点吃的和水,准备明天的富士山之行。

========华丽分割第二天========

第三天清晨的日本街道,远处的××生命就是××保险公司的意思。

由于日本地震多发,所以很多电线和电话线都没有办法埋到地下,所以随处可见这种电线杆(相信看过EVA的同学不会陌生吧)。

从名古屋到箱根的路是整个旅途中最艰苦和漫长的了(一般说来是这样,不过后面会写到有例外的……),开车大约要4小时左右,所以有机会看一下日本高速公路的休息站是什么样子。

休息站的垃圾箱。日本实行严格的垃圾分类制度,一般会分有可燃烧、可回收几种,其分类的复杂和详细从图中可见一斑。

休息站的电话亭,NTT的。

休息站的吸烟亭。日本很注重环保,一般的休息站都会有这种专门吸烟的场所。

小风铃。可爱吧~~~

第一站:箱根港。

终于到了箱根港,这个就是芦之湖。我们坐的“海盗船”到的对岸,话说这天天气烟雾缭绕的,很有气氛啊。

第二站:箱根神社。

箱根神社一角。恰好赶上1254年大祭司活动,据说晚上有游行。不过……可怜我们待不到晚上啊。

这天的午饭。感觉饭馆是华人开的,或者是接待华人旅行团的。拉面的味道不如居酒屋的正宗,面条也不够劲道。

第三站:平和公园。

平和公园里面有一座舍利塔,塔的前方摆放的多国捐赠的石刻。有心的朋友仔细去看看,很有门道的。

这天最后一站:富士山五合目(终于到了)!

其实,五合目只是一个地名,下面还有一到四合目。旅行车只能开到五合目这个地方,要登富士山就要从五合目徒步出发攀登了。

五合目上面的商业街。由于天气原因,烟雾缭绕,也凭添了些灵异的气氛。

富士山邮局。据说是日本海拔最高的邮局,里面工作的小姑娘居然一口流利的中文。邮局边上的商店东西价格很公道,买点做纪念很不错。

正好赶上烟雾驱散,露出富士山的轮廓,天公还是很给面子的哈。不过很快烟雾就又笼罩回来了。

通往五合目的公路。我们就是从这里上来的。灵异的气氛让我想到了《X档案》第一季第一集的情节,也许这里真的可以通灵吧。

这天晚上住在富士山附近的旅店,四周没有什么商店,不过倒是有温泉可泡~~~

在日本泡温泉都是裸泡,绝不可穿泳衣泳裤;随身的手巾也只能顶到头上或者围在脖子上,绝不可放到温泉的水里。一般的流程是先冲澡净身,再到池子里面泡,比较讲究的。

========华丽分割第三天========

第四天清晨旅店外的树林,真是令人心旷神怡啊。

从富士山到东京,正常需要1小时40分钟左右就好了。但是……旅行中总是有很多突发的情况,我们就很不巧,赶上了高速公路严重的车祸,整整被堵在路上3个多小时。不过,这次堵车让我见识了日本人的秩序。你不会听到有人鸣笛,不会看到有人加塞,跟不可能见识到应急车道被占得水泄不通。大家就是在那里排队等待,有的卡车司机在看漫画,一切平静而有秩序。森田导说:如果你在日本还不会开车,那你在全世界就都开不了了,因为日本人开车很规矩的排队,你只要跟着走就好了;如果你在北京可以开车,那你在全世界就都可以开了,因为北京开车讲究快、准、狠。

直到正午道路才疏通,此时刚走了1/3不到。于是,为了解决吃饭等生理问题,我们就停在了一处计划外的高速公路休息站补充给养了。

海老名。很大的一个休息站,吃的种类很多,1000日元能吃饱,还有节余。

休息站的一辆小车,很特色的轮子~~~

日本的车牌分为三类:绿牌、白牌和黄牌。绿牌是营运类车辆,需要上交营运税;白牌是普通家用车辆;黄牌是排量小于0.6的车辆,用森田导的话说就是“妈妈买菜车”。黄牌在大阪城区和近郊很普遍,但是到了东京就很少见到了,也是可以感受到的不同吧。

日本当日油价,合人民币十多块一升,虽然绝对数值比国内贵很多,但是如果考虑到收入水平的话着实比国内便宜不少,要知道这个价格可是含税的啊!!

东京附近的一处工地。包裹的很严实,不会有扬尘、遗撒和诺大的噪声。

东京街道一角。楼宇间隙很小,空间利用率极高(后面到都厅展望台上有更震撼的场景)。

东京湾的自由女神像。不愧是美国的小老弟啊~~~

东京银座。应该是东京最繁华的商业街,很多企业的总店都在这条街上。我们来的时候正好赶上东北大地震好的节点期间,夜景灯光并不是很华丽,但是也能感受到浓浓的繁华气氛。

近处的这两车好像在等人。在日本,以单数为吉利数字,所以结婚的礼金一般都是5000、7000和9000;商品的系列也已单数为多,比如T-5、T-7和T-9;这个车牌也许在日本很牛吧……

东京附近的旅店房间。这个旅店应该算很好的了,但是房间里面就是两张床,床之间的空间就放两双拖鞋而已,真的是豪宅(“好窄”)啊~~~

旅店对面就是AEON,很大的一个超市,有日用品、百货和书什么的卖。最让我惊讶的是,这个超市收银台居然在超市中央,也就是说你付款后还停留在超市内,还可以接触到商品。并不是我瞧不起谁或者看扁谁,但是如果国内的超市是这种设计的话,估计损失一定会大到倒闭的程度吧。日本是信用社会的铁律又一次大放异彩。

在AEON边上,是一个居酒屋。我和老婆在里面还小吃了一把。正好赶上某品牌啤酒搞活动,第一扎免费。于是我们就喝着啤酒,就着咖喱面陶醉了一下,1000多日元,吃得心满意足。

========华丽分割第四天========

从旅店向外看,对面是日立Solution,同时可以看到AEON的标志。

第一站:浅草。

浅草寺和仲见世商业街。仲见世主要卖人形烧和手工艺品等。

浅草寺雷门。这个大灯笼是松下赞助的。

仲见世街上见到的猫。猫好像在日本很受喜爱,看看《我是猫咪跟踪狂》就知道了~~~

据森田导说,由于一起严重的受伤事件,日本主要的五大城市,禁止在行走的时候吸烟,如果想吸烟的话需要到指定的吸烟场所或者在原地吸完再走。

日本似乎吸烟的人很多,而且女性吸烟也很普遍,有专门的女士香烟出售。

第二站:都厅展望台。

从都厅展望台上远眺。震撼吧!由于日本地震多发,所以房子不大会造得很高。日本城市的密度,其实远大于中国城市的密度,但是人家可以充分利用空间,并且管理的井井有条,我觉得仅凭这点,就可以让企图用人口密度来掩盖管理无能的官老爷们汗颜。

其实都厅展望台上面很小,转一圈也不过5分钟。不过为了这5分钟,你需要排半小时队等电梯上来,还需要排半小时队等电梯下去,很是不成正比的。

第三站:迪斯尼Land。

由于单反体积庞大,并且怕水,所以去迪斯尼Land的时候就没带,错过了我们玩的项目和花车游行没照,有些遗憾。

去迪斯尼,首先要做好计划的功课,由于我们去的晚(下午2点左右),所以FastPass没派上用场,其实合理利用FastPass还是能快很多的。

其次要做好心理准备,我们的情况是基本每个带“山”的项目(比如飞溅山、太空山等)都要排近70分钟的队才能玩上,即使一天下来也不会玩到很多的项目的。

迪斯尼的纪念品,几乎清一色的Made in China,中国活,在日本算是一级的舶来品,价格便宜,质量又说得过去。

========华丽分割第五天========

终于到了走的日子,心中未免一丝的惆怅,毕竟留下的回忆太美好了。

由于前面堵车有点打乱了行程,早上要去皇居外苑游览。

前方学校的标志。我很喜欢这两个人物。

皇居外苑楠木正成像。配合天气背景很有气势。

皇居外苑的松柏。据森田导说这些松柏是从全日本精选过来的,感觉外观的确水准很高。

二重桥。里面就是天皇皇居。

皇居外苑对面。

回去的时候走的成田机场,而不是离东京较近的羽田机场,所以又耽误了很多时间。

成田机场里面卖折纸艺术品的小商店。

小记:

带着美好的回忆和一丝惆怅,回到了温暖的家中。

我其实一直在想,中国发展好了以后会不会成为一个日本?因为毕竟都是东方文化,都经历了泡沫时代的疯狂;不过,最大的区别是,二战后人家干了几十年,我们斗了几十年;而且我们不曾经历过泡沫破灭的洗礼,也不曾把能够从根本提高国民素质的教育放在首要的位置。所以,中国是否会发展成日本那样,其中又有很多的变数吧。

期待日本的自由行~~~

解决使用虚拟机安装SQL Server Failover Clustering报告The network address is invalid的问题

近来使用VirtualBox安装SQL Server Failover Clustering,在创建主节点选择网络名称后报告错误:

The given network name is unusable because there was a failure trying to determine if the network name is valid for use by the clustered SQL instance due to the following error:

‘The network address is invalid.’

Google了一下,是由于安装了Guest Additions(客户端增强功能)造成的。

先卸载GA,然后安装Clustering节点,安装好后再安装GA即可。

如果你可以忍受鼠标的延迟和分辨率不可自适应的问题,以及不能使用数据空间的不便,不装GA也行。

据说VMware也会遇到类似问题,解决方法一样的。

解决Windows 2008 R2安装SP1报告0x800f0818错误、IE9报告9C48错误和80246007错误

Windows Update向来是很头痛的一件事,尤其是在业务系统上,当年的Vista SP2不支持GRUB让我还记忆犹新,现在业务系统的R2安装SP1时又开始报错了。

先描述问题吧:

Windows 2008 R2的系统,未安装SP1,但是已经安装了IE9,且IE9使用正常。

前些日子发现该系统Windows Update有两个更新:一个是SP1,但是大小只有10M;另一个居然是IE9,大小47M左右。

选择更新,SP1报告失败,错误号0x800f0818IE9也报告失败,错误号9C48

更为可怕的是,在打开Server ManagerServer RoleFeature时把错,错误号HRESULT:0x800f0818

如果说打不上更新也还好,Server Manager报错可就很麻烦了。

Google一下,终获答案,在这里分享给大家,并加上自己的一些步骤。

参考文章:

How to fix Server Manager Errors after installing updates (HRESULT:0x800F0818 / HRESULT:0x800B0100)

http://blogs.technet.com/b/roplatforms/archive/2010/05/12/how-to-fix-server-manager-errors-after-installing-updates-hresult-0x800f0818-hresult-0x800b0100.aspx

我的步骤如下:

  1. 下载并安装Microsoft Update Readiness Tool,注意分清版本,好大的一个包;
  2. 运行完成后,查看C:\Windows\logs\CBS\Checksur.log内容,我的居然是:Unavailable repair files:servicing\packages\Microsoft-Windows-InternetExplorer-Package~31bf3856ad364e35~amd64~~9.4.8112.16421.mumservicing\packages\Microsoft-Windows-InternetExplorer-Package~31bf3856ad364e35~amd64~~9.4.8112.16421.cat

    看来IE9的文件有问题,由于未给出KB值,故下载了IE9的独立安装包;

  3. 取得C:\Windows\Servicing\Packages目录所有权(否则无法替换文件的):takeown /F C:\Windows\Servicing\Packages /R /D y不过可能需要重新改变一下当前用户授权,才能继承到文件,否则还是覆盖不了的;
  4. 解压IE9安装包,覆盖同名文件到C:\Windows\Servicing\Packages下。

好了,欢呼吧,Server Manager可以正常打开了,同时运行Windows Update,只有SP1一项了。看来IE9的文件真的出了问题。

好事多磨,接下来打SP1,一如既往的报错,只不过这次错误编号变成了80246007Google查看:

Windows Update 错误 80246007

http://windows.microsoft.com/zh-CN/windows-vista/Windows-Update-error-80246007

需要手工启动BITSBackground Intelligent Transfer Service)服务。

启动后,SP1能下载并安装了。

看来Windows Update是一道坎,不知道为什么文件就有问题了~~~

[转] 申音:被人为割裂的中国互联网

作者:申音,原文:http://www.5gme.com/space-1513-do-blog-id-105491.html

  我有两个朋友。
L的公司在上海,大半时间跑广东。他是华南某所不太知名的大学毕业的,小眼睛质朴男,多年以前还是个文学青年。哥们做手机网游的,我见他使过好几款手机,但最贵的一个也不过1千多块钱。比起什么Web2.0、移动互联网的概念,他更关心珠三角的几千万农民工和城市边缘的大学生“蚁族”,怎么关心?在东莞的夜宵摊上跟他们拼啤酒,在富士康厂区外网吧里刷夜,跟靠做他们生意开上宝马的便利店老板扯淡……
W猫在北京中关村。他从小就是个脑袋很大眼睛发亮的天才少年,数理化成绩很好,逻辑思维超强,英文和中文一般流利。在首都某著名大学毕业后,W 直接去美国名校拿了硕士,接着回国创业。我一直觉得,他是硅谷Geek们的中国版。诸如iPad之类的新技术玩意,我总能第一时间从他那儿找到。他也是国内把玩Facebook、Twitter、Groupon、Foursqure的人。啥叫互联网的未来,W做的网站就代表互联网的未来。
W比L拥有更多的掌声和名声。但遗憾的是,他做了好几个连投资人都觉得很酷的网站,却始终没有挣到大钱。原因不外如下:要么是起个大早,却被一大堆抄近道的同行给围追堵截;要么因为资金接济不上,只能让一个更有资源实力的大公司直接吃掉,还有的不知道触了哪根高压线被主管部门直接暂停。
L的生意是实实在在每天都能数着钱的,他都已经可以打高尔夫了,但他并不想告诉无关人他挣到钱了。说了也没人信,几十万月薪不到2000的打工仔拿着300块钱买的山寨机玩L公司做的游戏,每月给他贡献过百元的ARPU值,换句话说,他们收入的十来分之一都心甘情愿地送给L了。我有时也想不通,W针对的客户明明是北京、上海这些大城市中最有消费能力的精英。为什么他们舍得花钱买最贵的手机,换最新的笔记本电脑,下最好的馆子,在网上却什么都要免费。
圈里公认,只要是W做的事情必定引来围观。同行也好,媒体人、营销人也罢,口口相传,网站流量和用户量几乎是一条直线往上蹿。但奇怪的是,过了没多久就停止上升势头,开始跟中老年同志的心脏一样来回震荡。我也问过L,他的这些草根用户没几个有自己的电脑,更谈不上3G,究竟是怎么发掘的?L笑笑说,网吧都不是最有效的渠道。厂区周边有很多便利店,工人一下班就聚到哪儿。老板提供一台电脑,里面装了各种手机用的游戏、MP3、电影,再备一本类似早年K歌房里的“点歌簿”。不用上网,拿根USB数据线,想要什么下什么。还有更方便的,用手推车直接送到宿舍门口。
有次跟L吃饭,他提问我:如果一款游戏要打入45万富士康工人的市场,该请哪位代言人合适?我先猜周杰伦,摇头,丫目标受众是城市,又猜春哥也不对,她只杀伤学生和少妇,怒了,决定猜当红的凤娇,还是被鄙视!正确答案是凤凰传奇,有百度歌手榜单为证。备选是慕容晓晓。完全超出我知识范围,还好我没猜韩寒。
过去W单纯地以为凭技术就能改变社会,现在他知道你可以不过问政治,但政治会来过问你。不过,要让一个海归精英学会怎么跑门子疏通关系确实有点臊。L曾经愤青过,但如今很务实,好的商人都是知道怎么看《新闻联播》的。他挺关心运营商的人事变动和扫黄整顿,还搞过几次工友联谊会,虽然目的是为了推广他的游戏。前一段富士康工人“12连跳”,他很严肃地跟我说,这事他们有责任。我吓一跳。L讲,那些一想不开就跳楼的年轻人正是他的衣食父母。一部手机通常就是这些工人唯一的娱乐设备,与厂外世界交流的唯一媒介。他们有责任让工人们更快乐。
我所认识的投资人都对W评价很高,但却更爽快给L投钱。因为他们的心里也明镜似的:在中国,做精英的只能赚吆喝,做草根的才能赚着钱。腾讯、百度不就是最好的例子嘛。
上海那位梳分头打摩丝的笑星说过一句经典:我是喝咖啡的,北方那两位是吃大蒜的。咖啡是舶来品,感觉很洋气,吃大蒜却有益身心。今年炒大蒜的都挣了很多钱,没听说谁倒腾咖啡挣了钱。中国的互联网好像也是一样?
我曾经突发奇想,如果把W和L对调位置,情况会不一样吗?他们会更理解各自商业的长短吗?后来想想觉得这事不太可能。
W所追求的互联网,其实是一个“美式的互联网”。在美国,信息革命是从上个世纪60年代开始的,从1950后到1990后都是“数字化的一代”。他们之间并没有太大的“数字鸿沟”,他们的生意与生活,工作与娱乐都与互联网分不开。这也是为什么80后的扎克伯格能够和50后的乔布斯、60后的贝索斯、70后的佩奇同台竞技的原因。
同时,美国的社会结构是一颗“橄榄”,没有那么大的贫富差距、地区差异、城乡之别,所以,美国的互联网可以说是“全民的互联网”。
但当下中国的社会结构,原本我们以为它会是一座“金字塔”,但越来越变成一颗“图钉”。W和L一个站在削尖的头上,一个站在遥远的钉帽上。中国没有一个所谓“全民的互联网”,中国的互联网是人为割裂的。它既存在于精英的Think笔记本上,也存在于草根的MTK山寨机中。我们的精英也许和美国同步,草根却与越南同步。
事实上,中国的“数字化一代”只存在于北上广等一些大城市,20-40岁之间的几千万中产阶级。剩下的几亿中国互联网用户归根结底都只是QQ用户。互联网改变不了这个现状,能改变它的也许需要更宏大的社会变革和经济变革?
我相信,L看穿了所谓“中国的互联网”的本质。哪些精英们的欲望从来不缺乏满足的渠道,太多的企业在追逐宠坏其实有限的一群客户。相反,有一大批“数字化贫民”却没有办法利用互联网改变自己的命运,没有条件通过网络让自己的生活质量飞升,只能沉醉于廉价的虚拟娱乐中。L的商业很符合本土国情,很和谐社会,但他能够走出国门吗?
我一直相信,终有一天,W能做点“代表先进互联网”的事情,让美国人也能跟着咱们屁股后面学。可现实的磨难会不会打消他的意志呢?
按照哲学家柏拉图的“洞穴”理论,每个人从出生开始就呆在自己挖的一个洞穴里,我们所见的世界只不过是被阳光抛到洞穴墙壁上的影像,而我们这些洞穴的居民却把它当作是真实的世界,因为我们没有见到过其他的东西。而真实的世界却是在洞穴之外,在有太阳的地方。
不管看这个BLOG的各位精英们是否承认,我们和某些人——一群数量比我们大得多的人(中国的农民工、刚毕业的大学生等等,大概3亿人),完全生活在两个不同的世界。如果能关注那一群人,还会有很多机会。但很有可能,我们永远都走不出自己呆的洞穴。

[转] 张小喵:小白失恋了

转贴:http://my1510.cn/article.php?id=32283bfedfd63cac
小白失恋了 / 张小喵
2010-04-13 22:26
我的女同学小白失恋了。准确来说,是小白主动和男朋友提出的分手。小白的父母从远在长三角某小县城里的家里连夜坐车赶到北京,威胁小白尽快和那个男人了断,否则他们将与她断绝关系。小白对这段感情其实并没有太深的投入,两个人才认识不久,仅仅是处于初印象不错、刚开始进行彼此了解的阶段而已。但面对突如其来的反对,小白像是被注射了水泥一样,居然傲骨铮铮,宁死不屈。小白说,我不分,我从小就听你们的话,24年了,够了,你们让我读书,让我读文科,让我读研,让我考公务员,我都听你们的话,这次我偏要自己做主。

小白的妈妈对这个乖乖女表现出的如此不孝深感惊讶,先是破口大骂,佐以声泪俱下,小白无动于衷;妈妈转念一想,擦了眼泪,颔首屈膝,跪在了小白的面前。事发现场是在我们宿舍楼下,时间是下午四点钟。来来往往的同龄人或驻足,或侧目,或议论纷纷。小白说,她妈给她跪下的时候,她觉得自己眼前一片漆黑。

她是我亲妈,她知道我的软肋在哪里,她说我不答应她就长跪不起,她赢了。小白讲起这句话的时候,咬牙切齿的。

小白成功地“被分手”了,小白爸和小白妈慈爱地摸着女儿的长发叮嘱到,小白啊,不是做爹娘的势利,现在房价这么高,你要是能找个有房子的男人,起码少奋斗二十年啊,我们还不是为了你好,你要体谅做父母的苦心。看着小白面无表情的样子,父母确定这孩子真的是对那个没房的男人死心了,于是心满意足地踏上了回乡的列车。小白幽幽地说,老头和老太太都快到退休的年纪了,还这么操心,真是不容易,我体谅他们的不容易,可是谁来体谅我的不易?

小白和大部分听话的姑娘一样,读中学的时候收到男生情书会主动交给老师,读大学的时候忙着考各种各样的证,读研了更是为了保博、出国、公务员的事忙得焦头烂额。一次跟导师吃饭的时候,小白认识了已经毕业的师兄。师兄是青年才俊,但在人才密度几乎要大于1的北京,也只能是一名小职员。师兄没什么积蓄,没什么家世,没什么灰色收入,没什么坏心眼儿,刚还清读书时欠下的助学贷款,还要谨慎攒钱,以备那依然生活在西部的逐渐年迈的父母有什么不时之需。小白自己算了笔帐,师兄整个季度的全部薪水,一分不动,可以换到此时五环外的一平方房子。前提是,房价维持此时的水平不变。事实上,就在昨晚,据说通县某楼盘每平方又涨了四千块。

小白说,房子简直是最操蛋的事没有之一。有那笔钱,俩人开开心心游山玩水怎么过不好,干嘛要拿四十万的首付然后再背四十年的房贷去买一套只有五十年使用权限的房子。对于这个疑问,小白妈回答说,小白啊,人不能只想着自己,你们买不了房子,那以后你们的孩子怎么办?

得,感情这都是在为下一代活着。每一代都为下一代操着冠冕堂皇的心,然后名正言顺去破坏下一代的梦想,干涉下一代的选择,规范下一代的生活。你有什么好抱怨的呢?父母还不是为了你好。动机正确,手段就不应该再被指责。

本科的时候,小白爸跟小白说,千万不要谈恋爱,女孩子要有自己的人生追求和职业生涯规划。小白把这句话奉若神明,恪守不懈。本科毕业了,小白妈跟小白说,你年纪不小了,不能再拖了,尽快找一个身高在180以上学历在硕士以上存款要够得了首付收入要还得起房贷户口只能是京沪家里最好没兄弟姐妹的男人。

小白冷笑着说,这老头老太太真看得起自己姑娘,好像一大堆的黄金王老五都在排队等着我毕业等着我挑似的,要有这么好的男人,早有大把大把大二大三的小姑娘争着去钓了。我有择偶优势的时候你们不让我动,现在我没优势了,你们让我动,对不起,现在有人肯动我,我都感激不尽了。还180,还硕士,还京沪,再加个清华北大经济学,他俩就可以给凤姐当爹妈了。

我们劝小白瞒天过海,暗度陈仓。反正爹妈山高皇帝远的,你们就算在北京花前月下,浓情蜜意,二圣也不知道啊。小白坚决摇头。小白说,我自己爹妈,我懂,他们现在反对,将来就一定不会祝福。我跟他们执拗了二十几年,习惯了,但何必再拖师兄下水。他那么好的男人,该有个温柔贤惠的妹子,早早地明媒正娶,然后俩人安安乐乐,举案齐眉,多好。

小白说完这些话,垂下脸,掐灭了烟头。我们这代人,大概将永远活在父母不切实际的希冀里。爹妈不易,我们懂。他们还是孩子的时候,赶上了三年自然灾害;他们读书的时候,赶上了文化大革命;他们工作的时候,要上山下乡;他们结婚的时候,要晚婚晚育,还只能生一个;他们到了中年,又被迫下岗。他们对于安稳生活的渴望,我们懂。

入学报到的时候,父亲不顾经济的拮据,从单位请了假,一定要送我来学校。父亲说,托党和政府的福,他没机会来北京读书。我现在能来,很好。在北京的第一顿饭,酒量极其差劲的父亲一口气喝掉了半瓶啤酒,满面红光地说,这很好。父母们无法实现的青春梦想,我们懂。我们装作什么都懂的样子,默默承受着父母不能体谅的困窘。

小白签了实习合约,拉我一起去看出租房。三环的单间,屋里拉了一条布帘,分租给两个女生,每人每月2000。小白撇着嘴说,我爸卖命了一辈子,现在工资 1800。我们无奈对视,却笑不出来。小白说,我不明白啊,我要求真的不高,我真他妈的没想买房,我就想能有间自己的小屋子,有扇向阳的窗子,屋里铺过地砖,有张一米八的大床,有宽带,共用的厨房和洗澡间干干净净的,这要求很高嘛?!

小白说这话的时候想哭,我也想。我说,这真不高,我们爹妈被这个时代耽误了大半生,还为这个国家努力了大半生,我们又已经读了将近20年的书,我们想要能住进这么间小屋子不算过分吧。小白看着公共洗澡间满墙乱窜的蟑螂说,好,我承认刚才那个要求过分了,可是就算没有向阳的窗子,至少至少能不能不要有蟑螂。

小白问我,你以后打算要小孩么?我拼命摇头。小白说,我也不要,我们现在这样,再生出下一个憋屈的自己,何必呢。说完这句话,不知道是谁,竟然哭出了声来。

附上评论一则:
如斯人 | 2010-04-14 09:12

独立思考,并按此去做,或许一开始会有很多冲突,但最终会走出自已的路。
如果一味的屈从,或许会顺风顺水,但最终还是走出别人的路。
先排除其他的原因,我们太习惯与屈服,不管在多么好的理由之下,这是造成我们行为与思考相背离的原因。

在C++的STL queue中使用类或者结构体

原帖地址:http://topic.csdn.net/u/20100304/18/391935d7-fb3e-4822-94d6-26d945f5b8e9.html
原帖问题:
在list的用法中
list <类型> 变量名
这里的类型可以用结构体吗?
例如
struct node {
int id;}
list <node> a;
如果不行,为什么

我的编译器报错~~
\xitong\main.cpp||In function `int main()’:|
\xitong\main.cpp|20|error: `main()::node’ uses local type `main()::node’|
\xitong\main.cpp|20|error:  trying to instantiate `template <class _Alloc> class std::allocator’|
\xitong\main.cpp|20|error: template argument 2 is invalid|
\xitong\main.cpp|20|error: invalid type in declaration before ‘;’ token|
\xitong\main.cpp|20|warning: unused variable ‘manage’|

原帖解答:
把结构体的声明移到主函数外。

按C98标准来说,局部类不是外部链接属性的,不可以成为模板的参数。 改成全局类即可。
在C++下,局部类基本没有实用价值,不要使用。

=========================================
学习了,要尽量使用全局类。

Eclipse C++ 相对路径解析

原帖地址:http://topic.csdn.net/u/20091028/22/76aa601d-263b-40a6-ac6e-c606c243e648.html
———-
原问题:
linux系统,eclipse开发环境:

main.cpp里有这么一句
fopen(“file.txt”,”r”);

当在eclipse集成环境中执行程序时,此时需要将file.txt放到和main.cpp同一路径下。

而在eclipse编译后生成的Debug路径下有main的可执行文件(假设叫做a.out),如果在命令行进入Debug路径下,直接执行a.out,那么需要将file.txt放到和a.out在同一目录下。

如果在main.cpp再加上
char name[] = “PWD”;
char *value = NULL;
value = getenv(name);
printf(“%s”,value);

在eclipse下执行的打印结果是/root,估计这个是因为eclipse的工作目录是/root吧。

不明白的是,既然eclipse的工作目录是/root,那么它执行main.cpp里面的fopen(“file.txt”,”r”);语句时为什么是在main.cpp所在的目录下寻找file.txt,fopen(“file.txt”,”r”) 在这种情况下得到的绝对路径为什么不是/root/file.txt呢?这是不是和eclipse执行程序的设置有关,能设置某个变量来设定这个路径么?
———-
最佳答案:
fopen会原封不动的将pathname传入open系统调用,所以路径的解析,是open的责任。
open系统调用,遵循Linux的路径解析规则, $ man 7 path_resolution  可以阅读相关信息。

如果路径名以/开头,那么解析的时候,rootdir就是/,/又是继承自父进程,并且可被chroot修改。

若路径名不是/开头,则从进程的current working directory开始解析,cwd同样继承自父进程,
可被chdir修改。

如果这样执行
debug/a.out
那么fopen的文件,不会跟a.out在同一个目录,而是会出现在跟debug相同目录下。
==========
其实我也遇到了相同的问题,使用fin.open()时,在Eclipse下运行死活都找不到文件,除非给出绝对路径。
但是如果使用Shell定位到可执行程序下运行,只要文件在同一目录下,就可以找到。
看来Linux还是很博大精深的,一个路径就有这么多的学问。
好好学习吧,千万不要骄傲啊!